C程序混淆输出

时间:2014-04-10 06:46:14

标签: c

#include<stdio.h>


int main(){

        int main =22;
        printf("%d\n",main);
        return 0;
}

输出:22 即使编译器没有给出错误,我也将main定义为函数和变量。它应该给出错误“错误:重新定义'main'”。我无法理解为什么这段代码有效。

4 个答案:

答案 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,没有错误没有坏行为