C中参数的默认数据类型?

时间:2014-05-26 16:53:20

标签: c gcc

我是C的新手并且有一个问题。我认为我犯了一个错误,但编译器没有发出警告,程序运行正常。

我相信第4行有一个错误:

#include <stdio.h>

void void_int(int x);
void void_int(x) { // <-- no type definition for parameter x
        printf( "void_int: %d\n", x);
}

int main(int argc, char **argv) {
        printf("Hello world\n");

        // declare a function pointer
        void (*by_ref_void_int)(int);

        // assign pointer to a function
        by_ref_void_int = &void_int;

        // run referenced function
        by_ref_void_int(2);

        return 0;
}

我没有为函数定义void void_int(x) {的第一个参数定义类型,但是,gcc没有给我任何错误。程序运行得很好。

我编译:{{1​​}}。

有人会帮我理解吗?函数参数是否有默认类型,是否可能是int?

谢谢,并祝福

-S

gcc -Wall -o fp fp.c

1 个答案:

答案 0 :(得分:5)

保持与C语言的arcaic版本的兼容性,如果声明指定没有类型,则默认类型假定为int

如果您只是指定该语言的版本,编译器肯定会帮助您发现此

gcc -std=c99 a.c
a.c: In function ‘void_int’:
a.c:4:6: warning: type of ‘x’ defaults to ‘int’ [enabled by default]
 void void_int(x) { // <-- no type definition for parameter x
      ^

尝试指定一种语言版本,它总是一个对你有帮助的好习惯。