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

【问题描述】

1.文件test.cpp,使用major做变量名的完整代码如下:

1 #include <fstream>
2
3 struct Header {
4   int major;
5
6   Header(int mj)
7     : major(mj)  { }
8 };
9 int main(){}

2.在g++ 编译时,会产生如下错误:

DevNet_30_56_sles10sp1:/data/ackhan # 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(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=17130)

【解决办法】

  增加代码"#undef major"即可解决:

#include <fstream>

#undef major

struct Header {
  int major;

  Header(int mj)
    : major(mj)  { }
};
int main(){}
时间: 2024-08-28 00:47:49

C++使用major做变量名的问题的相关文章

JavaScript命名——name不能做变量名

使用name作为变量名(var name = ''),在IE(IE9)中未引起bug,在Chrome中引起bug但未明确指出命名错误,而是会报其他错误,故不便于发现. javascript中name既不是保留字,也不是关键字,因此用作变量时并不会报错:但是name是javascript内置的属性,所以用作变量时会引起其他bug,不便于调试. 会报错或造成一些错误的命名 保留字 关键字 JavaScript对象.属性和方法 Java保留关键字(Java可以和JavaS一起使用) Windows保留

Javascript变量名混淆细节

前言 UglifyJS会对JS文件的变量名进行混淆处理,要理解Javascript变量混淆的细节,我们需要回答以下几个问题: 1.遇到一个变量myName,我们怎么知道这个myName变量要不要混淆 2.混淆名字怎么生成才合适,新的名字替换旧的名字时有什么要注意的地方? 3.哪些关键字会产生一个作用域? 4.作用域链跟符号表在UglifyJS里边是怎么体现? 5.UglifyJS混淆的过程是什么样? 我们先梳理一下这5个问题,最后贴出我阅读UglifyJS在这部分的实现时做的代码注释. 1.遇到

MYSQL存储过程中 使用变量 做表名--转

原文地址:http://blog.csdn.net/business122/article/details/7528859 今天写一个对数据库做快照的存储过程,用到了动态表名,突然发现MYSQL不支持直接使用变量做表名,GOOGLE了下,采用以下方法: DECLARE dbName VARCHAR(30); SET dbName = 'aaa'; SET @STMT :=CONCAT("CREATE TABLE ",dbName," SELECT id from gamedb

Spring MVC返回json视图时,如何将对象直接序列化成不带变量名做为根节点

Spring MVC返回json视图时,如何将对象直接序列化成不带变量名做为根节点的 json 报文 问题 问题描述起来比较拗口,其实就是用Spring MVC时,如何将对象映射成 json 报文时不把对象作为json的根节点.即使用@ResponseBody的效果. 比如,默认情况下,使用ModelAndView的addObject(key,object)或者ModelMap的addAttribute(key,object)保存完Java对象,然后交给Srping的视图解析器解析成json时,

利用文件打开方式with open(&#39;文件名&#39;,方式) as 变量名做一个简单的复制(排除大文件bug)

1 #!usr/bin/env python 2 #-*- coding=utf-8 -*- 3 4 with open('b.py','r') as obj1, open('c.py','w') as obj2: 5 for line in obj1.read(): 6 obj2.write(line) 将a.py的数据一行一行的进行复制 节省的了内存 另外 这种打开方式 免除了 之后需要的f.close() 对代码量上有细微的差距...(我自己想的...) 注意:第二个open不接with

IOS高级教程2:反射根据变量的引用获取变量名

一.使用介绍 项目有的时候,会遇到一些特殊的处理,想要根据一个实例的引用,获取这个实例在代码中的名称.比如在处理View的坐标的时候,我们将UIView的坐标信息配置到plist文件中,我们可以设置一个key,再通过这个key来获取配置文件中的坐标等信息.有没有更简单的方法呢,或者我只想简单的用实例变量的变量名做为key.下面就介绍一种简单的,根据实例变量的引用获取实例变量名的办法. 转载请保留原本链接:http://my.oschina.net/taptale/blog/110626 二.引用

史上最糟糕的两个变量名(转)

英文原文:The world’s two worst variable names 作为一个程序员,“起名字”是他们工作中非常重要的一部分.Phil Karlton就说过:“在计算机科学领域,有两大难题,如何让缓存失效(cache invalidation)和如何给各种东西命名.”虽然很难,但是每次在写代码的时候,命名又是不可回避的工作.无论是程序变量名还是数据库表名或者是表里的列名,甚至是文件系统中的文件名,以及你的项目名称.产品名称,给这些东西起名字可不是个轻松活儿. 糟糕的命名方式随处可见

查找jar包中.class文件关键字(变量名,字符串)

有时查看日志,常常会发现由框架底层打印的错误日志.要修改这个错误的时候,如果不是对框架特别熟悉,就需要按照可能产生这个错误日志的流程一步一步找,一时半会不一定能找到.比如本人最近对smartfoxserver搭建的服务器做压测的时候,发现最大等待线程数超过20就会打印错误日志,然后就一直在smartfoxserver接受请求的反编译代码里找该错误输出,花了很长时间一直没找到.然后我在想能否用inputstream来查询字符串,试验代码如下: import java.io.BufferedRead

MySQL 动态sql语句执行 用时间做表名

1. 描述 在使用数据的时候,我时候我们需要很多数据库,而且想用时间来做表名以区分.但是MySQL在存储过程中不支持使用变量名来做表名或者列名. 比如,有一个表我们想以"2015-07-16 12:00:00"命名. 2. 解决方案 如果只是更换一个普通的表名的话,很简单,直接使用下面sql语句即可: alter table old_table_name rename new_table_name 但是要以时间为表名,动态命名的话就不可以了.首先我们可以用NOW()函数获取系统当前的时