Beim Kompilieren des folgenden Snippets geben sowohl gcc als auch clang nur eine Warnung aus. Hinweis Raum nach \
neben int
:Warum geben sowohl clamg als auch gcc nur dann eine Warnung aus, wenn ein Leerzeichen nach dem Backslash vorhanden ist, wenn der C-Standard angibt, dass Leerzeichen verboten sind?
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int \
a = 10;
printf("%d\n", a);
}
gcc:
main.c:7:6: warning: backslash and newline separated by space [enabled by default]
Klirren:
main.c:7:7: warning: backslash and newline separated by space int ^
In C99-Standard in 5.1.1.2 heißt es:
Each instance of a backslash character() immediately followed by a new-line character is deleted, splicing physical source lines to form logical source lines.
Warum entsprechen C-Compiler nicht dem C-Standard? Ich denke, es ist nur ihre Schöpfer Entscheidung nicht zu. Ich habe eine Nachricht in der GCC-Mailingliste gefunden, die dieses Verhalten eingeführt hat: http://gcc.gnu.org/ml/gcc-patches/2000-09/msg00430.html. Dort sagen sie, dass dies getan wird, weil nachfolgende Leerzeichen selten sind und sie sie nicht als Fehler behandeln wollen. Wie häufig ist das?
Es gibt einen Unterschied zwischen der Nichteinhaltung des C-Standards und der Kompilierung von nicht-konformen Programmen. Hier machen GCC und Clang das letztere. –