none
vc是如何处理c语言里的重复定义的? RRS feed

  • 常规讨论

  • 如下的c代码:

    #include <stdio.h>
    
    #define CASE0
    
    #if defined CASE0
    static int a = 1;
    static int a;
    #elif defined CASE1
    static int a;
    static int a = 1;
    #elif defined CASE2
    int a = 1;
    int a;
    #else //CASE3
    int a;
    int a = 1;
    #endif
    
    int main (void) 
    {
        printf("%d\n", a);
        return 0; 
    } 
    

    在打开CASE0时,vs2010报错:error C2370: “a”: 重定义;不同的存储类(vc6也报类似的错误)。

    其余三种情况都是编译通过的(四种情况都是使用c方式编译)。

    按照c标准的说法,static int a;和int a;都是临时定义,当存在对应的显示定义时,采用该显示定义。即CASE0和CASE1应该是一样的,CASE2和CASE3是一样的(gcc就是这样)。

    难道是vc对static类型的临时定义做特殊处理了?

    2011年12月13日 14:10

全部回复