Tyz*_*oid 1 c c++ visual-studio
我正在努力将一个大型项目从VS2012迁移到VS2015(宝贝步骤,我知道),我遇到了一个问题,C头不再编译,错误保留c ++关键字 - 即使它们被包括在内与外部C.
这是一个简化的例子(2012年编译,但不是2015年)
extern "C" {
#include "cheader.h"
}
int main()
{
printfFromC();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
#ifndef HEADER_H
#define HEADER_H
extern int export;
int printfFromC();
#endif
Run Code Online (Sandbox Code Playgroud)
#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++中,您会收到语法错误.
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |