我是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
答案 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
^
尝试指定一种语言版本,它总是一个对你有帮助的好习惯。