Hackly在单个文件中混合使用C / C ++语法?

时间:2016-02-25 08:42:06

标签: c++ c visual-studio-2013 c99

我被指派从C99Visual C++ 2013的方言移植一个大项目。

C99的方言:

  1. C99C++有不同的行为时,请选择C ++。

  2. 支持一些C++功能,例如函数/运算符重载。

  3. 支持一些C99功能,例如复合文字,可变参数宏和指定的初始值。

  4. 在卡住之前,我想知道我们是否可以在C99/C++中编写VS2013混合代码?

    它必须在两个编译器上编译,我想可能会有一些惊人的编译指示,如

     struct T {
         int data;
     };
     #pragma CompiledByC99_begin
     struct T tmp = { .data = 1 };
     #pragma CompiledByC99_end
    

    不幸的是,谷歌搜索后没有找到任何结果。 VS2013中是否存在此类黑客?

2 个答案:

答案 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

Refs on MSDN