- 论坛徽章:
- 0
|
原帖由 j1111011 于 2008-10-17 17:47 发表 ![]()
#include
#include
#include
using namespace std;
int main(int argc,char **argv){
if(argc==1)
return 0;
& ...
看来 windows 下有限制
我在linux下测试的。
用C写了程序,参数是函数名长度,用gcc编译。
在CentOS5.2上测试时,参数用了很大的值,源文件大小到了100M时,也没看到问题。
看来不同编译器结果不同。
应该没必要在长度上考虑了,gcc可能使用了什么其他技术。
#include <stdlib.h>
#include <stdio.h>
int main (int argc, char **argv)
{
long i;
int j = 0;
char func_name[100] = {0};
char file_a[100] = {0};
char file_b[100] = {0};
FILE *fp_a, *fp_b;
char *buf;
char *content;
char cmd[100];
if (argc == 1)
{
printf("usage: %s [length]\n", argv[0]);
return 1;
}
i = atol(argv[1]);
printf("length is %d\n", i);
buf = malloc(i + 1000);
content = malloc(i + 1000);
for (; i<=i; i+=100)
{
sprintf(func_name, "%d", i);
sprintf(file_a, "a%s.c", func_name);
sprintf(file_b, "b%s.c", func_name);
fp_a = fopen(file_a, "w");
fp_b = fopen(file_b, "w");
memset(buf, 0, i + 1000);
for (j = 0; j < i; j ++)
{
buf[j] = 'a';
}
sprintf(content, "\
void %s () {\n\
printf(\"hello from func.\\n\");\n\
}\n",
buf);
fwrite(content, strlen(content), 1, fp_a);
sprintf(content, "\
#include <stdlib.h>\n\n\
int main() {\n\
%s();\n\
printf(\"hello from main.\\n\");\n\
return 1;\n\
}\n",
buf);
fwrite(content, strlen(content), 1, fp_b);
fclose(fp_a);
fclose(fp_b);
break;
}
sprintf(cmd, "gcc %s %s -o %d", file_a, file_b, i);
system(cmd);
free(buf);
free(content);
return 0;
}
|
|
|