当我使用"gcc -o dene -Wall -ansi -pedantic-errors dene.c"编译函数时,gcc没有发出错误。(你能看一下if循环中以char开头的那一行吗?)
问题是为什么它们之间存在差异。
static void remove_negation(char *s,char *s1)
{
char **cmainp=malloc(sizeof(char*)*1);
int len=0;int d=0; int i=0;
cmainp[0]=malloc(sizeof(char)*300);
len=strlen(s);
for(i=0;i<len;++i)
{ if(s[i]=='-')
if(i==0 || s[i-1]==',')
/*look*/ {char *p=malloc(sizeof(char)*3); /*look*/
++i; p[0]=s[i]; p[1]='\0';
strcat(s1,","); strcat(s1,p); free(p);
continue;
}
cmainp[0][d]=s[i];
++d;
} cmainp[0][d+1]='\0';
strcpy(cmainp[0],s);
free(cmainp[0]);
}
然而,当使用gcc编译上述函数进行重新格式化时,gcc会发出以下错误提示:
"dene.c:10: error: ISO C90 forbids mixed declarations and code"
static void remove_negation(char *s,char *s1)
{
char **cmainp=malloc(sizeof(char*)*1);
/*look*/ cmainp[0]=malloc(sizeof(char)*300); /*look*/
int len=0;int d=0; int i=0;
len=strlen(s);
for(i=0;i<len;++i)
{ if(s[i]=='-')
if(i==0 || s[i-1]==',')
{char *p=malloc(sizeof(char)*3);
++i; p[0]=s[i]; p[1]='\0';
strcat(s1,","); strcat(s1,p); free(p);
continue;
}
cmainp[0][d]=s[i];
++d;
} cmainp[0][d+1]='\0';
strcpy(cmainp[0],s);
free(cmainp[0]);
}
最后一个问题,gcc会发出以下错误:
dene.c:16: 错误:在‘char’之前预期的表达式
dene.c:20: 错误:‘p1’未声明(在此函数中第一次使用)
dene.c:20: 错误:(每个未声明的标识符仅报告一次
dene.c:20: 错误:对于它出现的每个函数。)
static void remove_negation(char *s,char *s1)
{
char **cmainp=malloc(sizeof(char*)*1);
int len=0;int d=0; int i=0;
cmainp[0]=malloc(sizeof(char)*300);
len=strlen(s);
for(i=0;i<len;++i)
{ if(s[i]=='-')
/*look*/ char *p=malloc(sizeof(char)*3); /*look*/
if(i==0 || s[i-1]==',')
{
++i; p[0]=s[i]; p[1]='\0';
strcat(s1,","); strcat(s1,p); free(p);
continue;
}
cmainp[0][d]=s[i];
++d;
} cmainp[0][d+1]='\0';
strcpy(cmainp[0],s);
free(cmainp[0]);
}
问题是为什么它们之间存在差异。
foo() { int i; for(i=0; i<n; i++) { int j; for(j=0; j<n; j++) {}}}
这样的代码在C89之前的编译器中是否合法? - Z boson