示例程序1.注意第一行int
中的typedef
:
typedef int (*p)(); //Statement 1
int foo()
{
return 0;
}
int main()
{ int c;
p q=foo;
c=(*q)();
printf("%d",c);
return 0;
}
Output:0
示例程序2.所有相同,但第一行没有int
:
typedef (*p)(); //Statement 1
int foo()
{
return 0;
}
int main()
{ int c;
p q=foo;
c=(*q)();
printf("%d",c);
return 0;
}
Output:0
两种情况下的输出相同。它不会产生任何错误。为什么呢?
答案 0 :(得分:3)
您应该始终在诸如此类的问题中发布您正在使用的编译器(和版本)。
我的猜测是你正在使用允许隐式int的C89编译器。
答案 1 :(得分:2)
如果您在C99模式下编译,您将获得诊断,但在C89和标准前C中,关键字int
是可选的。
因此:
extern a;
main(argc, argv)
char **argv;
{
auto i;
...
return 0;
}
允许使用现代标准令人憎恶的其他编码风格。 (变量a
是int
;参数argc
是int
;变量i
是int
;返回类型是main()
int
是return 0;
。)请注意,在C99之前,您不应该从main()
离开{{1}};如果你这样做,返回到调用环境的值是未定义的。