C标准表示变量名称不应与标准C关键字和标准函数名称匹配.那么为什么下面的代码编译没有错误?
#include <stdio.h>
int main()
{
int main = 10;
printf("Magic is %d", main);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在下面的答案中,ouah写道
main不是保留标识符,允许main在C中命名变量
所以考虑下面的程序,这是否意味着fopen同样没有保留?
#include <stdio.h>
int main()
{
int fopen = 10;
printf("Magic is %d", fopen);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
oua*_*uah 32
您的程序是一个有效的C程序.
main不是保留标识符,允许main在C中命名变量.
你不能做的是main在文件范围命名变量,但这与其他与同名函数冲突的变量相同:
这是无效的:
int main = 0;
int main(void)
{
}
Run Code Online (Sandbox Code Playgroud)
出于同样的原因,这是无效的:
int foo = 0;
int foo(void)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:为解决OP问题编辑,OP问题中的第二个程序也有效,如C所示
(C11,7.1.3p1)"以下任何子条款中包含外部链接的所有标识符(包括未来的库方向)和errno始终保留用作具有外部链接的标识符."
但是fopen变量标识符在示例程序中具有块范围和无链接.