在定义引起C错误之前的功能声明

时间:2019-04-22 08:32:43

标签: c compiler-errors syntax-error function-declaration

我一直在尝试编写一个代码,该代码可以检查数组中是否存在123的序列,而我为此做了一个 check 函数。但是在 main 函数之前声明此函数会在我在其中写入参数时引起编译问题。

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>

int check(int, int);      /* This line is cauing trouble */

void main()
{   int arr_size;
    int a[]={0,1,2,1,2,1,4,5,1,2,3,4,5};
    arr_size = sizeof(a)/sizeof(a[0]);
    printf("%d",check(a, arr_size));

}

int check(int a[], int arr_size)
{
    int i;
    for(i=0;i<arr_size-1; i++)
    {
    if(a[i]==1 && a[i+1]==2 && a[i+2]==3)
        {
            return 1;

        }
    }
    return 0;
}

错误的屏幕快照随附于此。 Error produced in CodeBlocks

声明部分没有引起任何问题,当我没有在其中编写任何参数时,代码运行正常。

int check();  

我希望在声明函数时应该使用参数,而在这里情况并非如此。指导将不胜感激。

1 个答案:

答案 0 :(得分:5)

您在那里有冲突。

intint *(或int [])不是同一类型。

将您的前向声明更新为

int check(int *, int); 

也就是说,考虑到arr_size的用法,您需要将循环条件从更改为

for(i=0;i<arr_size-1; i++)

for(i=0;i<arr_size-2; i++)

因为您将[i+2]用作循环内的索引之一。


在这种情况下,关于int *(指针)与数组等效的原因,请参考第{6.7.6.3章,C11

  

将参数声明为“类型数组” 调整为“   输入’,[...]