Przeglądanie źródeł jądra Linuksa Znalazłem some piece of code, gdzie blok instrukcji otoczony nawiasem jest traktowany jako wyrażenie a la sepl (lub ML), czyli wyrażenie, której wartość jest wartością ostatniej instrukcji.Czy instrukcje złożone (bloki) są otoczone przez wyrażenia parens w ANSI C?
Na przykład:
int a = ({
int i;
int t = 1;
for (i = 2; i<5; i++) {
t*=i;
}
t;
});
Szukałem na ANSI C grammar próbuje dowiedzieć się, jak ten kawałek kodu, który mieści się w drzewie parsowania, ale nie zakończyły się sukcesem.
Czy ktokolwiek wie, czy to zachowanie jest wymagane przez standard, czy jest tylko cechą GCC?
Aktualizacja: Próbowałem z flagą -pedantic i kompilator teraz daje mi ostrzeżenie:
warning: ISO C forbids braced-groups within expressions
Możesz ukryć ostrzeżenie w GCC, wstawiając "__extension__" przed nawiasem otwierającym. – Flimm