【发布时间】:2018-11-05 16:55:23
【问题描述】:
我正在将一个大型项目从 VS2012 迁移到 VS2015(我知道是小步骤),我遇到了一个问题,即 C 头文件不再编译,在保留的 c++ 关键字上出错 - 即使它们'重新包含在外部 C 中。
这是一个简化的示例(在 2012 年编译,但不是 2015 年)
main.cpp
extern "C" {
#include "cheader.h"
}
int main()
{
printfFromC();
return 0;
}
cheader.h
#ifndef HEADER_H
#define HEADER_H
extern int export;
int printfFromC();
#endif
ctest.c
#include "cheader.h"
#include <stdio.h>
int export = 0;
int printfFromC()
{
export++;
return printf("Hello from C (invocation %d) !\n", export);
}
出现以下错误:
------ 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
编辑:
我在创建示例时犯了一个错误 - 导致问题的关键字是 export - 不是我最初想到的任何 c++ 保留关键字。下面的示例已修改为使用int export 而不是int new
【问题讨论】:
-
@NathanOliver 我在创建示例时犯了一个错误 - 导致问题的关键字是
export- 不是我最初想到的任何 c++ 保留关键字。 -
export也是C++中的保留字 -
@NeilButterworth 是的 - 但不同的是这个例子现在是在 2012 年编译的。
-
因为你古老的编译器没有正确支持 C++11 标准。
标签: c++ c visual-studio