我知道原则上这可能是未定义行为,但考虑到处理大型项目的利益,以下是我的GCC相关问题:
假设我使用相同的编译器安装程序,用gcc -std=c++98
编译一个翻译单元,用-std=c++11
编译另一个翻译单元,那么有没有任何保证我可以将两个目标文件链接在一起并获得一个定义明确的程序?
据我所知,潜在的问题只能来自于不同的宏导致库头文件的不同视图,而这反过来最多只会向标准库类中添加新成员函数,但从不会添加成员对象。
这样是否可以接受使用不同的语言选项编译较大项目的不同部分?
更新: 我应该补充一个正交的问题:使用两个不同的GCC版本(例如4.3和4.6),但使用相同的方言选项(-std=c++98
)怎么样?这份GCC文档似乎表明,在4.2.2和4.6之间,库在两个方向上都是兼容的。
_GLIBCXX_DEBUG
,则不安全。 - James Kanze