2013-06-27 3 views
4
final code2.c:9:1: warning: implicit declaration of function 'choice' is invalid in C99 [-Wimplicit-function-declaration] 
choice(); 
^ 
final code2.c:12:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int] 
choice() 
^~~~~~ 
final code2.c:23:1: warning: implicit declaration of function 'wrong' is invalid in C99 [-  Wimplicit-function-declaration] 
wrong(); 
^ 
final code2.c:25:1: warning: implicit declaration of function 'formula1' is invalid in C99 [-Wimplicit-function-declaration] 
formula1(); 
^ 
final code2.c:27:1: warning: implicit declaration of function 'formula2' is invalid in C99 [-Wimplicit-function-declaration] 
formula2(); 
^ 
final code2.c:29:1: warning: implicit declaration of function 'formula3' is invalid in C99 [-Wimplicit-function-declaration] 
formula3(); 
^ 
final code2.c:30:1: warning: control reaches end of non-void function [-Wreturn-type] 
} 
^ 
final code2.c:32:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int] 
wrong() 
^~~~~ 
final code2.c:35:1: warning: control reaches end of non-void function [-Wreturn-type] 
} 
^ 
final code2.c:37:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int] 
formula1() 
^~~~~~~~ 
final code2.c:47:1: warning: implicit declaration of function 'question' is invalid in C99 [-Wimplicit-function-declaration] 
question(); 
^ 
final code2.c:50:1: warning: control reaches end of non-void function [-Wreturn-type] 
} 
^ 
final code2.c:52:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int] 
formula2() 
^~~~~~~~ 
final code2.c:63:1: warning: control reaches end of non-void function [-Wreturn-type] 
} 
^ 
final code2.c:65:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int] 
formula3() 
^~~~~~~~ 
final code2.c:85:1: warning: control reaches end of non-void function [-Wreturn-type] 
} 
^ 
final code2.c:87:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int] 
question() 
^~~~~~~~ 
final code2.c:99:1: warning: control reaches end of non-void function [-Wreturn-type] 
} 

У меня есть эти предупреждения, которые я пытался избавиться от своего кода. Что означает каждое из предупреждений и как наилучшим образом избавиться от них?Что означают эти предупреждения C

+1

можете ли вы опубликовать код, вызывающий предупреждения? – Mgetz

+1

Не могли бы вы предоставить код? Ошибки очень общие. – Lorenz

+0

Я думаю, что эти предупреждения исходят из источника этого вопроса: http://stackoverflow.com/q/17346374/694576 – alk

ответ

6

Они означают, что вы не декларируете тип возвращаемого значения для своих функций и что вы не используете операторы return после того, как ваш компилятор добавил тип возвращаемого значения по умолчанию для этих функций по умолчанию: int. Объявите их все void, и предупреждения исчезнут.

EDIT: И объявите свои функции, прежде чем использовать их, также в файле заголовка или чуть выше кода, в котором они вызываются.

+1

И функции используются до их объявления – Oktalist

+0

@Oktalist: Хорошая точка, отредактирована. –

2

Похоже, у вас есть выбор функции(), что вы не дали тип возврата. Если вы собираетесь, чтобы он был недействительными объявит, как:

void choice(); 
1

Вы не заявляющие свои функции, прежде чем использовать их. C требует, чтобы вы объявляли функции перед их использованием. Обычно вы помещаете объявления в файл заголовка.

плохо example.c:

void myFunc() { 
    // This causes an implicit declaration; myTest() has not yet been defined. 
    myTest(); 
} 

void myTest() { 
} 

хорошего example.c:

void myFunc(); 
void myTest(); 

void myFunc() { 
    myTest(); 
} 

void myTest() { 
} 
3

У вас есть прототип функции, которая выглядит следующим образом:

choice(); 

В C89, это было хорошо, и это неявно станет:

int choice(); 

В C99 вам необходимо явно добавить возвращаемый тип. Это также похоже на то, что вы намереваетесь признать его недействительным, поэтому вам нужно:

void choice(); 
0

Вы используете функции, прежде чем их объявлять. Вы можете просто пропустить, включая заголовок.

Объяснение сообщения об ошибке: Wimplicit-function-declaration (только для C и Objective-C) Предоставлять предупреждение, когда функция используется перед объявлением. В режиме C99 (-std = c99 или -std = gnu99) это предупреждение включено по умолчанию, и оно превращается в ошибку посредством -pedantic-errors. Это предупреждение также включено -Wall.