Поскольку имена функций - это псевдонимы, чтобы использовать указатели на те функции, которые сами по себе являются целыми числами. Это семантически очень похоже на
#include <stdio.h>
int main(void) {
42;
}
Это действительно, но бессмысленно.
Ответ 2
По той же причине 1; будет компилироваться, getchar - это просто адрес функции. Результат оценивается, затем отбрасывается. В спецификации языка он называется "выражением выражения";
Ответ 3
C странно, этот код тоже компилируется, но он segfaults
который для записи, является наименьшим segfault в C
история.