Hej! Ja, det stämmer, för #if och #elif är lite mer generella än bara "är definierad". Därför behöver man #elif defined.invalid integer constant expression
Min collega upptäckte att det inte gick att kompilera ett program.
Felmeddelandet "invalid integer constant expression" genererades.
Kompilatorn pekar ut denna kod där felet ligger:
#ifdef FLAG1
MENUITEM "&Om FLAG1...", ID_APP_ABOUT
#elif FLAG2
MENUITEM "&Om FLAG2...", ID_APP_ABOUT
#elif FLAG3
MENUITEM "&Om FLAG3...", ID_APP_ABOUT
#else
MENUITEM "&Om Något annat...", ID_APP_ABOUT
#endif
Av en slump hittade jag istället denna kod:
#elif defined( FLAG2) ....Osv
Jag bytte ut alla ställen med denna upptäckt och fick programmet att kompilera utan fel.
Jag tycker att detta kan vara värt att nämna för att när man söker på webben får man dom mest kryptiska svar och dessa gav inte mig någon vägledning alls. Sv: invalid integer constant expression
Just för att det blir problem vid flera #elif, kan det vara trevligt att använda #if defined(x) istället för #ifdef x.
Sen bör man för övrigt inte använde preprocessor-direktiv (allt som börjar med #), förutom #include, och vissa #ifdef. Det finns ofta väsentligt bättre sätt att ta itu med problemen på kompilatornivå.