C++ 代码使用 .cpp Source 编译,但不能使用 .c 进行编译

C++ Code Compiles with .cpp Source but not .c

本文关键字:编译 但不能 Source 代码 cpp C++      更新时间:2023-10-16

在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++文件。

相关文章: