Почему этот фрагмент кода компилируется? - PullRequest
11 голосов
/ 08 января 2010

Почему следующий код компилируется?

#include <stdio.h>

int main(void) {
    getchar;
}

Ответы [ 3 ]

28 голосов
/ 08 января 2010

Поскольку имена функций являются псевдонимами для указателей функций на те функции, которые сами являются значениями, очень похожими на целые числа. Это семантически очень похоже на

#include <stdio.h>

int main(void) {
    42;
}

Это действительно, но бессмысленно.

13 голосов
/ 08 января 2010

По той же причине 1; скомпилируется, getchar - это просто адрес функции. Результат оценивается, затем отбрасывается. В спецификации языка это называется «оператор выражения»;

2 голосов
/ 27 июня 2011

C странно, этот код тоже компилируется, но он segfaults что, к сведению, является самым маленьким segfault в C история.

main;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...