0

示例程序 1.inttypedef第一行注释:

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

两种情况下的输出相同。它不会产生任何错误。为什么?

4

2 回答 2

3

您应该始终发布您在此类问题中使用的编译器(和版本)。

我的猜测是您使用的是允许隐式 int 的 C89 编译器。

于 2013-04-12T20:29:01.980 回答
2

如果你在 C99 模式下编译,你会得到一个诊断,但在 C89 和准标准 C 中,关键字int是可选的。

因此:

extern a;

main(argc, argv)
char **argv;
{
    auto i;
    ...
    return 0;
}

和其他被现代标准视为可憎的编码风格是允许的。(变量a是一个int;参数argc是一个int;变量i是一个int;返回类型main()是一个int。)请注意,在 C99 之前,你不应该离开return 0;from main(); 如果你这样做了,返回到调用环境的值是未定义的。

于 2013-04-12T20:30:11.023 回答