【发布时间】:2018-05-13 23:43:47
【问题描述】:
我在GCC 编译器上使用gcc prog.c -Wall -Wextra -std=gnu11 -pedantic 命令编译了以下程序。我想知道,它工作正常,没有任何警告或错误。
#include <stdio.h>
int main(void)
{
for (int i = 0; i == 0; i++)
{
printf("%d\n", i);
long int i = 1; // Why doesn't redeclaration error?
printf("%ld\n", i);
}
}
为什么编译器不生成重声明变量i错误?
【问题讨论】:
-
您是否也没有收到
int main未返回值的警告? -
根据 n1570(C11 草案)的 5.1.2.2.3:“到达终止 main 函数的 } 返回值 0”(只要返回类型与
int兼容。 ) -
在 C99 及更高版本中,为了(被误导?)与 C++98 保持一致,您可以省略
main()末尾的return 0;(但仅限于main()—没有其他函数得到特殊处理),它相当于最后的return 0;。就个人而言,我认为这不是一个好的决定,而且我的政策是不利用许可。不过,我无法阻止其他人这样做——我只能建议他们不要这样做。 -
Scope hiding in C的可能重复
-
@OmG,根本不是那个的副本。
标签: c gcc declaration