starałem trochę niewygodne wyprzedzającym i wymyślił coś takiego:błąd Preprocessor przy definiowaniu =
#include <stdio.h>
#define SIX =6
int main(void)
{
int x=6;
int y=2;
if(x=SIX)
printf("X == 6\n");
if(y=SIX)
printf("Y==6\n");
return 0;
}
gcc daje mi błędy:
test.c: In function ‘main’:
test.c:10:8: error: expected expression before ‘=’ token
test.c:12:8: error: expected expression before ‘=’ token
dlaczego tak jest?
Możliwy duplikat [Jakie są najgorsze makr świata/nadużycia procesorów, z którymi miałeś do czynienia kiedykolwiek?] (Http://stackoverflow.com/questions/652788/what-is-the-worst-real -world-macros-pre-procesor-nadużycie-ty-kiedykolwiek-natkniesz się) Po prostu żartuję, dobre pytanie. –
Uruchamiając to przez preprocesor, testy zmieniają się w 'if (x = = 6)'. Nie jestem pewien, po co wstawia się przestrzeń ... prawdopodobnie ktoś, kto zna jedną z specyfikacji C znacznie lepiej niż ja, pojawi się ... – cdhowie
Preprocesor zajmuje się tokenami, logicznie ze spacjami oddzielającymi tokeny. Kiedy tokenizuje 'if (x = SIX)', to ma 'if',' (',' x', '=' i 'SIX'. Gdy makro rozszerza' SIX', ma dodatkowe tokeny '=' i '6' .Ale sąsiednie tokeny' = 'nie są tym samym co jeden token' == '(i są w rzeczywistości nieprawidłową składnią C) - stąd błąd kompilacji –