C++ 代码使用 .cpp Source 编译,但不能使用 .c 进行编译
C++ Code Compiles with .cpp Source but not .c
在Visual Studio 2008中,使用C++,我尝试使用 http://msdn.microsoft.com/en-us/library/ms235636.aspx 中的说明构建DLL,只是我命名了一个扩展名为".c"而不是建议的".cpp"的源文件。
扩展名为 .c 时,编译器会引发 37 个错误。扩展名为 .cpp,DLL 将成功生成。
源文件的扩展名有什么区别?
以下是完整的代码:
// MathFuncsDll.cpp
// compile with: /EHsc /LD
#include "MathFuncsDll.h"
#include <stdexcept>
using namespace std;
namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{
return a + b;
}
double MyMathFuncs::Subtract(double a, double b)
{
return a - b;
}
double MyMathFuncs::Multiply(double a, double b)
{
return a * b;
}
double MyMathFuncs::Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}
return a / b;
}
}
// MathFuncsDll.h
namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static __declspec(dllexport) double Add(double a, double b);
// Returns a - b
static __declspec(dllexport) double Subtract(double a, double b);
// Returns a * b
static __declspec(dllexport) double Multiply(double a, double b);
// Returns a / b
// Throws DivideByZeroException if b is 0
static __declspec(dllexport) double Divide(double a, double b);
};
}
当扩展被.c
时,编译器将其编译为C。当它被.cpp
时,它会将其编译为C++。
编译器(驱动程序)根据扩展猜测源语言,假设 C 表示 .c
,C++ 表示 .cpp
。您可以使用-Tp
来强制C++或-Tc
来强制 C 来覆盖该猜测。如果您希望传递的所有文件都这样做,而不仅仅是一个文件,请大写(-TP
或-TC
)。
编译器很可能将文件解释为 C 文件,而不是C++文件。
相关文章:
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- C++程序使用 mingw 在 Linux 上交叉编译在 MSy2 中工作,但不能直接在 Windows 中工作
- 此模板函数在哪里生成?可以通过g++编译,但不能在Visual Studio中编译
- 没有返回类型的静态函数可以通过Windows上的编译,但不能传递Linux上的编译
- 可以在Ubuntu中进行编译,但不能在Mac OS X中进行编译
- 是否可以在编译时使用`constexpr std::initializer_list`,但不能使用ODR
- C++ 代码使用 .cpp Source 编译,但不能使用 .c 进行编译
- random_shuffle() 适用于 Windows,但不能在 Linux 上编译
- VRPN C++代码在Linux上编译,但不能在Windows上编译
- C++中的简单代码正在编译,但不能在Linux中执行
- 这个模板"specialization"代码在做什么,为什么它可以编译但不能按预期工作?
- c++代码可以在centosg++中编译,但不能在Visual studio 2008中编译
- 为什么谷歌测试编译,但不能看到我的项目来源
- Netbeans Cpp编译和运行项目,但不能使用cppunit进行测试
- c++代码可以在mac上编译,但不能在linux上编译
- 标量初始化器代码中的多余元素可以用gcc编译,但不能用g++
- Visual Studio 2010 包含文件可以'see'但不能编译
- Visual Studio 2010 c++ SDL游戏可以在它编译的计算机上运行,但不能在任何其他计算机上运行
- 阿杜伊诺崇高文本 2.我可以编译但不能上传。错误"The system cannot find the file specified"