2013-06-10 5 views
7

Data:C direttiva #error e commenti

#error /* 
*/ foo 

Microsoft C++ uscite un messaggio di errore di /* e GCC uscite foo.

Quale è corretto?

+4

"Microsoft C++" è un compilatore C? –

risposta

7

GCC è corretto.

La sostituzione dei commenti (comprese le interruzioni di riga) avviene nella fase di traduzione 3, pre-elaborazione nella fase di traduzione 4 (ISO/IEC 9899: 1999, §5.1.1.2).

Quindi, la parte di pre-elaborazione del compilatore non "vede" più le interruzioni di linea.

E, #error è definito come questo (§6.10.5):

Una direttiva al preprocessore della forma

# error pp-tokens_opt new-line

fa sì che l'attuazione di produrre un messaggio di diagnostica che comprende la specificato sequenza di token di preelaborazione.

Quindi, il foo deve essere parte dell'output.

2

GCC è corretto perché deve essere sostituito da uno spazio singolo / * ... * / nello standard.