int main(void)
{
#if 0
something"
#endif
return 0;
}
Powyższy prosty program generuje ostrzeżenie: missing terminating " character
w gcc. Wydaje się to dziwne, ponieważ oznacza to, że kompilator dopuszcza, że bloki kodu między #if 0
i endif
mają niepoprawną instrukcję, taką jak something
, ale nie zawierają podwójnych cytatów "
, które nie są parami. To samo dzieje się przy korzystaniu z #ifdef
i #ifndef
.Bloki kodu pomiędzy #if 0 i #endif muszą mieć sparowane podwójne cudzysłowy?
Prawdziwe komentarze są w porządku tutaj:
int main(void)
{
/*
something"
*/
return 0;
}
Dlaczego? A pojedynczy cytat: '
zachowuje się podobnie, czy są jakieś inne tokeny, które traktują specjalnie?
Który kompilator? –
@ IgnacioVazquez-Abrams Użyłem online gcc do przetestowania http://www.compileonline.com/compile_c_online.php –
Nie można odtworzyć tego z klangiem (Apple LLVM wersja 4.2 (clang-425.0.28) lub gcc (i686- apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1) –