我很惊讶地得知g(4.9)正在编译这个(而gcc不会):
#include <st@R_419_6901@.h>enum{ ONE = 1,TWO = 2,THREE = 3};int main(int argc,char* argv[]){ int sw = 2; switch (sw) { case::ONE: { printf("1\n"); break; } case::TWO: { printf("2\n"); break; } case::THREE: { printf("3\n"); break; } default: { printf("default\n"); } }}
g预处理器如何能够将“case”与“:: ONE:”分开?
解决方法How is the g++ preprocessor able to separate the “case” from the “::ONE:”?
它不是预处理器,而是简单的编译器,它解释::引用全局命名空间.
案例标签将被解析为
case :: THREE :
这完全没问题,因为你的枚举值出现在全局命名空间(::)中.
总结以上是内存溢出为你收集整理的c – 为什么“case :: LABEL:”用g编译?全部内容,希望文章能够帮你解决c – 为什么“case :: LABEL:”用g编译?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)