#include<stdio.h>
int main(){
int main =22;
printf("%d\n",main);
return 0;
}
输出:22 即使编译器没有给出错误,我也将main定义为函数和变量。它应该给出错误“错误:重新定义'main'”。我无法理解为什么这段代码有效。
答案 0 :(得分:7)
它不会给您一个错误,因为main
不是关键字。 but main is define 2 times
- 范围规则发挥作用。
答案 1 :(得分:3)
main 函数位于全局范围内 - 而变量 main 是在函数 main 范围内定义的。他们不在同一水平,因此没有冲突。
int main=22;
行告诉编译器使用(声明)局部变量 main - 没有冲突/歧义。
做
int main(){
return 0;
}
int main =22;
另一方面,你会收到错误。
答案 2 :(得分:3)
函数内的main
声明在函数范围内创建一个新标识符。它不会覆盖在全局范围内定义的main
函数。
答案 3 :(得分:0)
#include <stdio.h>
#include <string.h>
void stuff();
main()
{
int val = 10;
printf("from main: %d\n", val);
stuff();
printf("from main: %d\n", val);
stuff();
}
void stuff()
{
int val = 5;
printf("from stuff: %d\n", val);
}
定义int val很多次并不重要,因为在它定义的范围很重要,这将输出10 5 10 5,没有错误没有坏行为