2012-05-31 3 views
0

Dans Visual Studio 2008, en utilisant C++, j'ai essayé de construire une DLL en utilisant les instructions à http://msdn.microsoft.com/en-us/library/ms235636.aspx, sauf que j'ai nommé un fichier source avec une extension de ".c" plutôt que le ".cpp" suggéré.Code C++ Compile avec .cpp Source mais pas .c

Avec une extension de .c, le compilateur génère 37 erreurs. Avec une extension de .cpp, la DLL se construit avec succès.

Quelle est la différence entre l'extension d'un fichier source?

Voici le code complet:

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

Répondre

3

Le compilateur (programme pilote) détermine le langage source en fonction de l'extension, en supposant C pour .c et C++ pour .cpp. Vous pouvez remplacer cette supposition avec -Tp pour forcer C++ ou -Tc pour forcer C. Si vous voulez que pour tous les fichiers que vous passez au lieu d'un seul, mettre en majuscule (-TP ou -TC).

+2

Il utilise Visual Studio. Cliquez avec le bouton droit sur le fichier dans l'explorateur de solution-> properties-> configuration Properties-> C/C++ -> Advanced-> Compile As. –

3

probablement le compilateur interprète le fichier en tant que fichier C, pas un C++.

8

Lorsque l'extension est .c, le compilateur compile comme C. Quand il est .cpp, il compile en C++.

+0

Ceci est remplaçable dans les paramètres de ce fichier. –

+0

@MooingDuck: ... ou avec des options, comme le souligne Jerry Coffin. Mais je ne faisais qu'expliquer le problème. – Ryan

Questions connexes