2016-04-13 9 views
0

ist folgendes zu beachtenkann ein Makro

#if TABLE_SIZE>200 
#undef TABLE_SIZE 
#define TABLE_SIZE 200 

The macro TABLE_SIZE is being compared

ist es möglich, in #if mit nicht numerischen Wert verglichen werden, um dessen, dass mit einem nicht numerischen Wert verglichen, wie,

#if MACRO==ABCDEF123 

Ich habe es versucht, aber der Compiler beklagt, dass ABCDEF123 nicht definiert ist, und nimmt es als 0 an.

+2

Wieder geöffnet, da dies auch C++ getaggt ist, das konstruktive Template-basierte Lösungen anziehen könnte. – Bathsheba

+0

@Bathsheba, eigentlich habe ich Ihren Kommentar für die Wiedereröffnung dieses Q updated. Aber ich habe festgestellt, dass Makros und Vorlagen in diesem Kontext nicht auskommen. Ich bin mir nicht sicher über die Geschichte dieses Q. Wurde das verknüpfte Q nur als Duplikat früher markiert? Nichtsdestoweniger sehe ich nicht, dass etwas, was über die in diesem Beitrag gegebenen Antworten hinausgeht, möglich ist. Auch scheint es, dass der Code in diesem Q wie er ist (mit '# endif') tatsächlich gut zusammengesetzt ist. Meistens bedeutete OP, was im verknüpften Q gefragt wurde. – iammilind

Antwort

0

Für eine echte Portabilität kann der Ausdruck Ausdruck in #IF expression nur Ganz- und Zeichenkonstanten enthalten. Die C- und C++ Preprozessoren können auch auswerten +, -, *, /, <<, >>, !=, == und die beiden logischen Operatoren && und ||, die die Kurzschlüsse Regeln der Standard-C und C++ gehorchen.

Also nein, Sie können eine Zeichenfolge nicht direkt vergleichen.