Вы получаете предупреждение о
implicit declaration of function 'getch'
, потому что вы не включают заголовок который объявляет getch
. В стандартных заголовках такая функция не объявляется <stdio.h>
или <stdlib.h>
.
Фактически, нет функции с именем getch
в любой стандартный заголовок C.
До стандарта C99 язык C допускал вызовы функций без видимого объявления. Такой вызов фактически создаст неявное объявление функции, возвращающей int
, и примет аргументы любого (продвинутого) типа, который вы фактически передали.
В зависимости от этого никогда не было хорошей идеей. Вы должны всегда имеют правильную директиву #include
для заголовка, которая объявляет любую библиотечную функцию, которую вы используете в своей программе.
C99 упал правило «неявный int
» и сделал любой вызов функции без видимой декларации будет нарушение ограничения, требуя диагностику (диагностический дозволено быть не фатальная ошибкой.)
Если вы компилируете в Windows, если я правильно помню, есть функция getch()
, объявленная в <conio.h>
. Если вы хотите использовать эту функцию, вам нужно добавить #include <conio.h>
в свою программу.
Я не рекомендую это делать; использование getch()
не является необходимым и делает вашу программу не переносной. В некоторых средах разработки Windows сложно запускать «консольные программы» (программы, которые печатаются на стандартный вывод, а не на создание графического интерфейса); часто запуск такой программы создает временное окно, которое уничтожается, как только программа заканчивается. Вызов стандартной функции getchar()
- еще один способ избежать исчезновения окна. Или вы можете выполнить программу из командной строки, и ее вывод появится в вашем текущем окне команд.
Если вы компилируете UNIX-подобную систему, есть еще одна функция: getch()
, объявленная в <curses.h>
. Я могу скомпилировать и выполнить вашу программу в Linux, если я добавлю -lcurses
в командную строку компилятора. Но вы не должны использовать эту функцию getch()
, если вы еще не создали среду проклятий, и довольно ясно, что вы не хотите этого делать.
В идеале, классический «привет мир» программа должна быть просто:
#include <stdio.h>
int main(void) {
printf("Hello world!\n");
return 0;
}
Как вы получите, что для запуска и пусть вы видите выход зависит от среды (которые вы не сказали нам о) ,
'getch()' или 'getchar()'? –
Нестандартный 'getch()' находится в 'conio.h' (также нестандартном), который вы не указали. Он «работает», потому что тип возврата совместим с неявным типом возвращаемого значения, принятым компилятором: 'int'. Короче говоря, вам повезло. Подумайте, вместо этого используйте ['getchar()'] (http://en.cppreference.com/w/c/io/getchar). – WhozCraig
Спасибо @WhozCraig за ваш комментарий (если бы это был ответ, который я с радостью принимаю) –