Fms*_*rat 2 c c++ compiler-errors compilation visual-studio-2010
试图弄清楚如何使用C和C++文件来编译应用程序.不是整个代码,但足以得到这个想法:
main.cpp中:
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include "one.h"
#include "two.h"
int __stdcall WinMain(HINSTANCE hInst, HINSTANCE hInst2, LPSTR lpCmdLine, int nShowCmd) {
FunctionOne();
FunctionTwo();
}
Run Code Online (Sandbox Code Playgroud)
one.cpp:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <gdiplus.h>
#include <gdiplusflat.h>
using namespace Gdiplus;
using namespace Gdiplus::DllExports;
int FunctionOne() {
}
Run Code Online (Sandbox Code Playgroud)
two.c
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int FunctionTwo() {
}
Run Code Online (Sandbox Code Playgroud)
头文件仅包含这些函数的定义.
现在,如果我使用main.cpp编译它,我会得到一个FunctionTwo的"未解析的外部符号".如果我使用main.c编译它,我会得到与FunctionOne相同的东西.这是否可能,如果是这样,我如何设置项目以便正确编译(Visual Studio 2010)?
如果我根据main的扩展名注释掉备用函数,它编译得很好.
谢谢!
Han*_*ant 10
问题是two.h
,几乎可以肯定的是,不允许C++编译器正确编译C函数原型.您将希望利用预定义的__cplusplus宏,如下所示:
two.h:
#ifdef __cplusplus
extern "C" {
#endif
int FunctionTwo();
// etc...
#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)
可爱的宏汤;)如果标题是预先烘焙的,之前从未见过C++编译器,请在.cpp源代码文件中执行此操作:
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include "one.h"
extern "C" {
#include "two.h"
}
Run Code Online (Sandbox Code Playgroud)
一些程序员将头文件命名为.hpp(如果它们包含C++声明)和.h(如果它们包含C声明).这是我个人青睐的一个很好的做法.Boost团队也是如此.它没有让世界炙手可热.
归档时间: |
|
查看次数: |
9459 次 |
最近记录: |