2013-03-04 5 views
0

Je veux montrer l'erreur quand quelqu'un essaye de compiler mon code sous un autre système que WIN32 et LINUX. Mais ce code:Directives du préprocesseur et #error

#ifdef WIN32 
    // Some code here for windows 
#elif LINUX 
    // Some code for linux 
#else 
#error OS unsupported! 
#endif 

Mais cela me donne une erreur:

#error OS unsupported

et le compilateur ne dit rien d'autre, juste erreur. Qu'est-ce qui ne va pas?

+1

Je dirais que 'WIN32' n'est pas défini, et que' LINUX' n'est pas défini ou est zéro. –

+0

Compilez-vous sur iOS? –

+0

@JonathanWakely ça n'a pas d'importance LuchianGrigore non, sur Debian 7 – aso

Répondre

1

LINUX n'est pas une macro prédéfinie standard. Vous voulez probablement vérifier pour __linux pas LINUX

Je connais quelques vérifications de code pour _WIN32 mais je ne sais pas ce qui est correct sur Windows.

+1

'__linux' semble être obsolète (pas conforme à POSIX) même si cela fonctionne bien. Apparemment, on devrait utiliser '__linux__' à la place. – syam

+0

Je pense que cette référence est fausse, 'linux' n'est pas dans l'espace de noms réservé, mais' __linux' est, donc je ne sais pas pourquoi il n'est pas compatible POSIX. '__linux__' fonctionnera certainement aussi, voir http://gcc.gnu.org/onlinedocs/cpp/System_002dspecific-Predefined-Macros.html pour en savoir plus –

+1

" À l'exception des identificateurs commençant par le préfixe '_POSIX_', tous les identifiants qui commencer par un et soit une lettre majuscule ou un autre sont toujours réservés à toute utilisation par l'implémentation. " http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html –

2

deux questions:

  • votre #elif ne teste pas la simple existence du symbole, mais pour la vérité (ie définie non nulle et.). Vous devez utiliser #elif defined(...) et, pour être cohérent, #if defined(...) au début.

  • les symboles que vous recherchez ne sont pas corrects. Vous devez utiliser, respectivement, _WIN32 et __linux__. Voir this reference pour plus de plates-formes.

Questions connexes