#endif 和 #else 扩展(IBM 扩展)
C 和 C++ 语言标准不支持 #endif 或 #else之后的额外文本。 XL C/C++ 编译器符合标准。 当您从支持 #endif 或 #else之后的额外文本的编译器中移植代码时,可以指定选项 -qlanglvl=textafterendif 以禁止发出的警告消息。
一种用途是对相应的
#if 或 #ifdef正在测试的内容进行注释。 例如:#ifdef MY_MACRO
...
#else MY_MACRO not defined
...
#endif MY_MACRO在这种情况下,如果您希望编译器对此偏离标准的情况保持静默,那么可以通过指定选项 -qlanglvl=textafterendif来禁止消息。可以使用任何受支持的语言级别指定子选项 textafterendif 。 在几乎所有情况下,此子选项的缺省值为 -qlanglvl=notextafterendif,表示如果在 #else 或 #endif之后有任何无关文本,那么将发出消息。 一个例外是在 C 编译器中,当语言级别为 "经典" 时。 在此情况下,子选项的缺省值为 -qlanglvl=textafterendif,因为此语言级别已允许在 #else 或 #endif 之后使用额外文本而不生成消息。