2010-11-04 24 views
0

gcc 4.4.4 c89Utiliser #define pour définir et #iffinir pour voir s'il est défini

J'essaie de définir quelque chose. Si elle est définie, je veux faire quelque chose, sinon je veux faire quelque chose de différent. Lorsque j'essaye le code ci-dessus dans ma fonction, il semble que j'obtiens d'autres erreurs dans mon code. Cependant, si je commente le #define PARSE_STRING il compile ok. Je me demande juste ai-je besoin du #define PARSE_STRING?

Un grand merci pour toutes les suggestions,

====== EDIT avec une solution à jour

pourrait-il préférable de le faire de cette façon, au lieu?

#define PARSE_STRING 
    for(i = 0; i < NUMBER_OF_STRINGS; i++) { 
#if defined (PARSE_STRING) 
    /* run code for parsing the strings */ 
#elif defined (NO_PARSE_STRING) 
    /* run code that doesn't parse the strings 
#endif 
    } 
+0

J'édité mon code quand je collais il. C'est juste une erreur. Merci. – ant2009

+0

Je suppose que votre faute d'orthographe vous piquera tôt ou tard: '#if defined (PARSE_STING)' devrait probablement être '#if defined (PARSE_STRING)'. –

+2

RE: l'édition: non, ce n'est pas mieux comme ça. –

Répondre

7

Vous avez mélangé le désentrelacement des directives de pré-traitement avec le début et la fin du corps de la fonction:

} 
#endif 

devrait probablement être

#endif 
} 
+0

Vous avez raison. Le #endif était hors de la portée de la boucle for. Merci – ant2009

2

En effet, si elle est défini, vous n'aurez pas la fermeture } qui sera une erreur de syntaxe.

2

Vous avez inclus le support de fin de la boucle dans l'un des conditionals

#else 
    } 
#endif 

Devrait être

#else 
    //Stuff 
#endif 
}