我从使用Visual Studio 2010编译的开发人员那里收到C ++源代码,然后我需要在各种不同的编译器下重新编译:GCC,LLVM,其他版本的Visual Studio等。有时候他发给我的代码(在VS2010中编译时没有警告)无法在其他编译器下编译。
他是否可以在VS2010中设置任何编译器设置以增加其代码可以轻松移植的可能性?
答案 0 :(得分:3)
在语言层面,没有银弹。你能做的最好是尽可能地坚持语言标准。如果您利用特定于特定编译器的扩展(使用Visual C ++,/Za
将禁用非标准语言扩展),大多数编译器都可以选择发出警告或错误。但这并不完美,因为没有编译器完全实现100%的标准,所以即使使用严格兼容的代码,您仍然可能存在可移植性问题。
还要注意,许多日常代码实际上利用了扩展或未定义或编译器定义的行为,通常没有意识到,因此在完全符合标准的模式下编译可能不实际。
您还必须了解标准允许的不同之处。例如,类似int的类型在不同系统上可能是不同的大小。 Windows是LLP64,而大多数Unix派生的操作系统都是LP64。
在系统级别,我不知道一个完美的方法来确保程序员不依赖于系统特定的东西(例如<windows.h>
或<pthreads.h>
)。
最好的办法是让所有开发人员在所有目标平台上运行测试版本变得简单。