繁体   English   中英

#define指令C ++中的静态变量

[英]static variable in #define directive c++

是否可以在#define指令中声明静态变量?

    // header file
    #define TEXT_ENUM
    #ifdef TEXT_ENUM
        #define TEXT_HANDLING_MACRO  \
             static const char * TEXT[]; \
             static const char * getText( int _enum ) { \
                 return TEXT[_enum]; \
             }
    #else
        #define TEXT_HANDLING_MACRO
    #endif

    struct Foo {
        TEXT_HANDLING_MACRO
    };

   // cpp file
   #include "foo.h"

   const char * Foo::TEXT[] = { 
       "ONE",
       "TWO",
       "THREE",
       0
   };

当我将此头文件包含在其他文件中并尝试访问Foo::TEXT[]时,编译器将如何解析静态const char *。

是否可以在#define指令中声明静态变量?

对的,这是可能的。

当我将此头文件包含在其他文件中并尝试访问Foo::TEXT[]时,编译器将如何解析静态const char *。

在链接阶段已解决。

您必须弄清楚在C编译器使用的编译阶段会发生什么。

由于#define是预编译器指令,因此在实际编译或查看代码之前,所有问题都将得到解决。 文本片段(代码,函数,包括所有内容)将根据指令传递或过滤。

其余所有操作都在此之后发生,例如编译,它将寻找全局变量声明,而链接则将寻找那些变量的地址。

在这种情况下,如果您使用gcc编译器和-E选项(仅执行预编译阶段)来获取文件并进行编译,则会得到:

    struct Foo {
        static const char * TEXT[]; static const char * getText( int _enum ) {   return TEXT[_enum]; }
    };

   const char * Foo::TEXT[] = {
       "ONE",
       "TWO",
       "THREE",
       0
   };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM