2012-02-16 13 views
5

widzę konstrukcje takie jak:#ifdef i wyjaśnienie potrzebne

#ifdef FOO || defined BAR 
... 
#endif 

i skargi kompilator "Uwaga: dodatkowe znaki na końcu #ifdef dyrektywy", oczywiście powinno być:

#if defined FOO || defined BAR 
... 
#endif 

Does standard wyraźnie to mówi? Czy możesz wskazać na odpowiednią część?

+4

Zawsze uważałem, że '# ifdef' działa tylko dla pojedynczych symboli. Przeczytałem to jako: "jeśli symbol, jest zdefiniowany ...". –

Odpowiedz

5

W C99, 6,10 dyrektyw przerób ustęp 1 Składnia:

if-group: 
# if constant-expression new-line groupopt 
# ifdef identifier new-line groupopt 
# ifndef identifier new-line groupopt 

To pokazuje Twoja pierwsza konstrukcja z #ifdef jest błędna, ponieważ tylko identyfikator mogą śledzić #ifdef, stała ekspresja nie jest dozwolone.