C++使用major做变量名的问题

导语: 在代码书写过程中,能起出浅显易懂的变量名,也是一门劲道的功夫。

当时正在设计用户信息的存储表结构,对于“专业”最先想到的英文单词就是“major”,但是遇到一些问题,记录并解决如下。

一。问题描述:

1.使用major做变量名的测试代码如下:

#include 

struct Header {
  int major;

  Header(int mj)
    : major(mj)  { }
};
int main(){}

2.编译时,产生如下错误:

/data # g++ test.cpp 
test.cpp: In constructor ‘Header::Header(int)’:
test.cpp:8: error: class ‘Header’ does not have any field named ‘gnu_dev_major’
二。原因分析

查阅资料发现:当在结构体内定义一个变量major,并使用参数列表major()进行初始化的时候,会和C++标准文件中定义的宏冲突,编译产生错误。具体参考 GCC Bugzilla – Bug 17130

三。解决办法:

通过增加"#undef major",取消前置定义即可:

#include 

#undef major

struct Header {
  int major;

  Header(int mj)
    : major(mj)  { }
};
int main(){}
四。总结:

当然最好自己重新起一个名字,比如说可以用profession,哈哈!

你可能感兴趣的:(C++使用major做变量名的问题)