Visual Studio 2015:Extern"C"和"export"关键字

Tyz*_*oid 1 c c++ visual-studio

我正在努力将一个大型项目从VS2012迁移到VS2015(宝贝步骤,我知道),我遇到了一个问题,C头不再编译,错误保留c ++关键字 - 即使它们被包括在内与外部C.

这是一个简化的例子(2012年编译,但不是2015年)

main.cpp中

extern "C" {
    #include "cheader.h"
}

int main()
{
    printfFromC();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

cheader.h

#ifndef HEADER_H
#define HEADER_H

extern int export;
int printfFromC();

#endif
Run Code Online (Sandbox Code Playgroud)

ctest.c

#include "cheader.h"
#include <stdio.h>

int export = 0;

int printfFromC()
{
    export++;
    return printf("Hello from C (invocation %d) !\n", export);
}
Run Code Online (Sandbox Code Playgroud)

出现以下错误:

------ Build started: Project: ConsoleApplication1, Configuration: Debug Win32 ------
  main.cpp
c:\[...]\cheader.h(4): warning C4091: 'extern ': ignored on left of 'int' when no variable is declared
c:\[...]\cheader.h(4): error C2143: syntax error: missing ';' before 'export'
c:\[...]\cheader.h(4): error C3378: a declaration can be exported only from a module interface unit
Run Code Online (Sandbox Code Playgroud)

编辑:

我在创建示例时犯了一个错误 - 导致问题的关键字是export- 不是我认为的任何c ++保留关键字.以下示例已被修改为使用int export而不是int new

小智 6

使用extern "C"控件名称 - 修改它所应用的代码 - 它不会神奇地使编译器将该代码编译为C.因此,当您#include包含的标头extern int export;main.cpp,它被编译为C++代码,并且作为export保留字在C++中,您会收到语法错误.