2012-02-02 2 views
0

Некоторые меня эту ошибку, когда я пытаюсь скомпилировать программу на C.неявное объявление функции «GetChar» в C

myfunctions.c:27:2: warning: implicit declaration of function ‘getChar’ [-Wimplicit-function-declaration] 

Вот строка 27:

while(myChar = getChar() && myChar != '') 

Я звоню это в заголовке:

#include <stdio.h> 
#include <unistd.h> 
+1

Даже после исправления имени, это почти наверняка * не *, что вы хотите. Проверьте свой приоритет. Ваш цикл эквивалентен 'while (myChar = (getchar() && myChar! = ''))' Вы, вероятно, хотите явно сказать 'while ((myChar = getchar()) && myChar! = '')'. – FatalError

+0

Эй, если это ваш точный код, ваш сравнительный символ не существует. Исправьте это. –

+0

Спасибо, ребята, будет ли это работать? \t while ((myChar = getchar()) && (myChar! = '')) –

ответ

10

это пишется getchar, а не getChar. C чувствителен к регистру, и почти все стандартные имена функций C - это строчные буквы.

Что касается того, почему он «неявно объявлен», когда он не существует ... в более старых версиях C, если имя функции неизвестно компилятору, предполагается, что это функция, которая возвращает int. Это почти как если бы вы сказали int getChar();. Я слышал, что C99 не допускает этого, но большинство компиляторов вообще не придерживаются его, если вы не скажете им.

+2

Представьте, сколько меньше программ ошибок было бы, если бы компиляторы действительно обеспечивали выполнение этого (и другие проблемы, на которые они игнорируют стандарт и могут показывать слайд). –

0

Я не знаю, почему, но компилятор GCC (платформа выигрыша) знает getch(). Но если вы включите компиляцию -pedantic, это произойдет.

Решение: используйте getchar(), и все должно работать нормально.

Смежные вопросы