2012-01-04 174 views
0

我有简单的其他如果和有错误的单词语法 - 为。 请帮我解决这个语法如果其他功能

Error 4 error C2143: syntax error : missing ';' before 'type' 
Error 7 error C2143: syntax error : missing ';' before '{' 
Error 3 error C2143: syntax error : missing ')' before 'type' 
Error 6 error C2059: syntax error : ')' 

我的代码检查哪个数组较大并提出更大。 这就是我的全部fnction:

void PrintIdentical(...) 
{ 
    int i; 
    int smaller; 


    ... 

    for (i = 0; i < smaller; i++) 
    { 
     printf ("%d", arrA[i]); 
     printf ("%d", arrB[i]); 
    } 
} 
+0

您是否正确地关闭了函数定义的主体?也许你是,但是你还没有发布整个函数定义,所以想知道如果你错过了。 – 2012-01-04 08:21:32

+0

上面的代码不完整。 – obo 2012-01-04 08:23:40

+0

你可以发布一些围绕'enticl()'的代码吗? – hmjd 2012-01-04 08:24:05

回答

4
for (int i = 0; ... 

该语法是C99,它在以前的标准中是不允许的。既然你已经宣布i,你可以更改到:

for (i = 0; ... 

如果你想在那里块级i无论如何(这将影子,你在你的函数之前定义的i),然后使用:

int i; 
for (i = 0; ... 

或者得到一个支持C99的编译器。

1

此代码应编译,除非你居然忘了有拖尾}关闭功能。

另一个问题可能是重新声明i。我在一些编译器上看到了这一点。另外,一个注释 - 在for循环中,你不需要重新声明i,你可以使用现有的声明。

我还假设你自己定义了函数print

+0

我一直在使用的所有编译器都可以处理块内的变量的声明,并且具有相同的名称。但是,有些调试器不能,所以也许会把你扔掉? – 2012-01-04 08:34:48

+0

它不会让我失望,编译与gcc(不记得版本)在solaris下definetely给出错误。 – 2012-01-04 08:41:35

+0

对于“在for循环中声明变量”的含义似乎存在一些混淆。抱歉。我的意思是如果你有'我'; for(...){int i;}'应该总是正确的。但是,对于'for(int i = ...)'编译器并不都同意规格,然后问题就开始了。 – 2012-01-06 09:49:58

1

如果您严格使用C,则无法像现在这样在For loop正文中声明变量。我已经尝试使用GCC,并且出现编译错误。

error: 'for' loop initial declaration used outside C99 mode 

而且,你似乎重新申报i,和一些编译器将不能够检测到,作为一个新的领域。

+1

这取决于这是否是C99。此外,我不知道一个编译器不能处理这样的重定义。这是在规格! – 2012-01-04 08:29:20

+0

@MrLister:我试着在http://codepad.org上编译它,选择C,然后我得到了那个错误。至于重新定义,我记得VC++ 6.0,如果我们在for循环内重新声明一个变量,抱怨。虽然我使用VC++ 6.0已经很长时间了。 – 2012-01-04 08:36:03

+0

如果你在'for'子句中声明*之后声明了一个变量*,VC++ 6会抱怨。 VC++ 6对'for'子句中声明的变量使用'预标准样式'范围 - 也就是说,变量在'for'循环结束后保持'活动'。所以你不能在'for'循环之后有另一个变量名的定义。为了完整起见,VC6(编译C代码)不允许在'for'子句中的变量声明(或者在块中的第一个非声明语句之后)。不幸的是,编译C代码时MSVC仍然是这种情况。 – 2012-01-04 09:09:25

0
void enticl(int arrA[], int arrA_size, int arrB[], int arrB_size) 
{ 
    int i; 
    int smaller; 
    int *arr; 

    if(arrA_size>arrB_size) 
    { 
     smaller=arrB_size; 
     arr = arrB; 
    } 
    else 
    { 
     smaller=arrA_size; 
     arr = arrB; 

    } 

    for(i = 0; i < smaller; i++) 
    { 
     printf("%d\n", arr[i]); 
    } 
}