我试图建立,使用MSVS在2010以下的git发现这个项目:
https://github.com/Joonhwan/exprtk
问题是,当我注释掉exprtk.hpp文件中的行48“的#define exprtk_lean_and_mean”,我得到以下编译器错误:
Error 1 error C1128: number of sections exceeded object file format limit : compile with /bigobj
谷歌搜索的错误,似乎预示着编译的翻译单元编制的东西比arbitariy限制较大,并添加“bigobj”命令行应该可以解决这个问题(它不会)。 编译与海湾合作委员会(4.3)的代码,工作无故障。
我的问题是:
请问C ++的地方就可以在翻译单元中有类型的数量是否有限制?
是代码在这个项目不好的做法是布局方式? (谷歌搜索时,我注意到有很多Boost库有同样的问题,如:Boost.Sprit)
请问C ++的地方就可以在翻译单元中有类型的数量是否有限制?
请注意,这些参数的最大值保持打开特定实现。 该标准只强制要求必须由实现支持的最低要求。 一个实现将记录它支持的最大值,在这种情况下MSVC实现这样做。
这些在C ++标准的特殊部分中定义。
附件B -实施数量
因为计算机是有限的,C ++实现方式不可避免地在它们可以成功地处理的程序的大小的限制。 每次执行应记录如果知道了这些限制。 这个文件也可以举固定在那里的存在,说如何计算变量限制为可用资源的功能,或者说是固定的限制是不存在的或未知的限制。
的限制可能限制数量时,其包括以下的那些或其它描述。 以下各量的方括号内的数目被推荐为最小为该数量。 然而,这些量仅仅是指导,并不确定是否合规。
- 复合语句,迭代控制结构和选择控制结构[256]的嵌套层次。
- 条件包含[256]的嵌套层次。
- 指针,数组和函数声明(以任何组合)修饰的算术,结构,联合或不完整的声明[256]型。
- 一个完整的表达[256]内括号表达式的嵌套层次。
- 字符在内部标识符或宏名称[1 024]编号。
- 在外部标识符[1 024]的字符数。
- 在一个转换单元的外部标识符[65 536]。
- 与块范围标识符在一个块[1 024]声明。
- 宏标识符同时在一个转换单元[65 536]中定义。
- 参数的一个函数定义[256]。
- 参数在一个函数调用[256] **。
- 参数在一个宏定义[256]。
- 参数在一个宏调用[256]。
- 在一个逻辑源极线[65 536]特征。
- 在一个字符串的字符文字或宽字符串文字(串联后)[65 536]。
- 一个对象[262 144]的大小 。
- #include文件嵌套层数[256]。
- case标签switch语句(不包括对任何嵌套switch语句)[16 384]。
- 在一个类,结构,或联合数据成员[16 384]。
- 在一个单一的枚举枚举常数[4 096]。
- 嵌套类,结构,或联合定义的在一个单一的结构声明列表[256]水平。
- atexit注册的功能()[32]。
- 直接和间接的基类[16 384]。
- 用于单个类[1024]直接基类。
- 会员在一个类[4 096]声明。
- 在一个类最终压倒一切的虚函数,访问或不[16 384]。
- 一类[1 024]的直接和间接虚拟基。
- 类的静态成员[1 024]。
- 在一类朋友的声明[4 096]。
- 在一个类中的访问控制声明[4 096]。
- 在构造函数中定义成员初始化[6 144]。
- 一个标识符的范围资格[256]。
- 嵌套外部规范[1 024]。
- 在模板声明[1024]模板参数。
- 以递归嵌套的模板实例[17]。
- 每try块[256]处理程序。
- 在单个函数声明[256]掷规格。
的限制是由旧版本MSVC和相应的接头的使用OBJ格式内。 因此,尽管这种限制是任意它不能进行对编译器的新版本的默认行为。 退房的说明/ bigobj选项:
那之前出厂的Visual C ++ 2005链接器无法读取的obj制作与/ bigobj的文件。