Страницы

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

вторник, 31 декабря 2019 г.

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

#c


main(_)
{
    printf("%d",_);
}

 gcc -o test.c test


test.exe

1
    


Ответы

Ответ 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.

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

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