C ++代码使用.cpp源编译,但不是.c

时间:2012-05-31 23:28:14

标签: c++ visual-studio-2008 file-extension

在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);
    };
}

3 个答案:

答案 0 :(得分:8)

当扩展名为.c时,编译器将其编译为C.当它为.cpp时,它将其编译为C ++。

答案 1 :(得分:3)

可能编译器将文件解释为C文件,而不是C ++文件。

答案 2 :(得分:3)

编译器(驱动程序)根据扩展名猜测源语言,假设.c为C,.cpp为C ++。您可以使用-Tp覆盖该猜测以强制C ++或-Tc强制使用C.如果您想要传递的所有文件而不是一个,则大写(-TP或{{1 }})。