2010-10-28 7 views
1

Je suis nouveau à la programmation & J'ai trouvé ce code quand je passais par un livre. Je crois qu'il donne un exemple d'utilisation d'une macro assert() définie. Il ne compile pas sur code :: blocks 10.05. Je reçois des erreurs telles queen utilisant une simple assert() macro

  1. '#' est pas suivie d'un paramètre macro
  2. unterminated de #else
  3. dans la fonction 'int main()' 'ASSERT' n'a pas été déclaré dans ce champ

code:

#include<iostream> 
#define DEBUG 

#ifndef DEBUG 
#define ASSERT(x) 
#else 
#define ASSERT(x)\ 
if(!(x))\ 
{\ 
     cout<<"Error!!Assert"<<#x<<"failed\n";\ 
     cout<<"on line"<<__LINE__<<"\n";\ 
     cout<<"in file"<<__FILE__<<"\n";\ 
}\ 
#endif 

using namespace std; 

int main() 
{ 
    int x = 5; 
    cout<<"\nFirst assert."; 
    ASSERT(x==5); 
    cout<<"\nSecond assert."; 
    ASSERT(x!=5); 
    cout<<"\nDone."<<endl; 

    return 0; 
} 

Toute aide serait grandement appréciée. Merci d'avance.

+1

Êtes-vous mettre une ligne vide avant #define assert (x) \ if (! (X)) \ ? Essayez de sortir la ligne vide si vous êtes. – irrelephant

+0

Vous avez probablement une ligne vide après une ligne de définition de macro se terminant par une barre oblique inverse. Vous devez conserver vos lignes de définition de macro, en terminant chaque ligne par une barre oblique inverse. –

Répondre

2
if(!(x))\ 
{\ 
     cout<<"Error!!Assert"<<#x<<"failed\n";\ 
     cout<<"on line"<<__LINE__<<"\n";\ 
     cout<<"in file"<<__FILE__<<"\n";\ 
} // no backslash 
+4

Exceptionnellement, vous voulez dire '/ * no backslash * /', dans le cas où le code de l'original affiche une ligne comme 'ASSERT (x); DoSomethingImportant(); ':-) – AlcubierreDrive

+0

@Jon hmm, oui .. peu difficile – Anycorn

+0

Je ne vois pas de problème avec les commentaires. Ce que vous auriez un problème avec des utilisations comme: 'si (x) ASSERT (y) sinon foobar (z);' – UncleBens