Страницы

Поиск по вопросам

четверг, 20 декабря 2018 г.

Почему следующая программа выводит 1?

main(_) { printf("%d",_); }
gcc -o test.c test test.exe 1


Ответ

Из стандарта (§ 5.1.2.2.1) следует, что так писать функцию main нельзя, и результат зависит от конкретной имплементации: The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters: int main(void) { /* ... */ } or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared): int main(int argc, char *argv[]) { /* ... */ } or equivalent; or in some other implementation-defined manner. Предположу, что в вашем случае: Бестиповый аргумент посчитался int'ом, как в старых версиях C. То же относится к возвращаемому значению функции. argc отобразился на эту переменную (если вы запускаете программу без аргументов, argc == 1). Можно проверить эту версию, передав в программу аргументы командной строки и проверив, как поменяется вывод программы. Чтобы компилятор переключился на более современный диалект языка, попробуйте ключ -std=c99

Комментариев нет:

Отправить комментарий