我被指派从C99
到Visual C++ 2013
的方言移植一个大项目。
C99
的方言:
当C99
和C++
有不同的行为时,请选择C ++。
支持一些C++
功能,例如函数/运算符重载。
支持一些C99
功能,例如复合文字,可变参数宏和指定的初始值。
在卡住之前,我想知道我们是否可以在C99/C++
中编写VS2013
混合代码?
它必须在两个编译器上编译,我想可能会有一些惊人的编译指示,如
struct T {
int data;
};
#pragma CompiledByC99_begin
struct T tmp = { .data = 1 };
#pragma CompiledByC99_end
不幸的是,谷歌搜索后没有找到任何结果。 VS2013
中是否存在此类黑客?
答案 0 :(得分:2)
您只能在Visual Studio 2015中使用有限的C99功能,而在2013年则更少(请参阅this question以供参考)
来自MSDN Blog entry的与您所需功能相关的引用:
此外,还将实施一些C99核心语言功能 2013 RTM:
C99 _Bool
C99复合文字
C99指定的初始化程序
C99 变量声明
因此,根据您的确切需要,您可以在没有任何黑客的情况下进行操作
答案 1 :(得分:0)
如果您需要更改一小部分代码以使其可由MSVC2013进行编译,则可以使用_MSC_VER
。它是为MSVC编译器定义的,对于VC 2013具有整数值1800。
所以你可以使用
#ifdef _MSC_VER
// code compilable under MSVC
#else
// other dialect
#endif