C и C ++ - два разных языка, и в данном конкретном случае между ними существует огромная разница.Из содержания вопроса я предполагаю, что вы говорите о C.
#include <stdio.h>
int main() {
print( 5, "hi" ); // [1]
}
int print( int count, const char* txt ) {
int i;
for ( i = 0; i < count; ++i )
printf( "%s\n", txt );
}
Это правильная программа на C, которая делает то, что вы можете ожидать: печатает 5 строк с надписью "hi" в каждой из них.Язык C находит вызов в [1], он предполагает, что print
- это функция, которая возвращает int
и принимает неизвестное количество аргументов (неизвестно компилятору, известно программисту), компилятор предполагает , что вызов правильный и продолжает компиляцию.Поскольку определение функции и совпадение вызовов, программа хорошо сформирована.
Проблема в том, что, когда компилятор анализирует строку в [1], он не может выполнить какой-либо тип проверки, так как он не знает, что это за функция.Если при написании этой строки мы ошибаемся в порядке аргументов и набираем print( "hi", 5 );
, то компилятор все равно примет эту строку, так как не имеет предварительного знания print
.Так как вызов неверен, даже если код компилируется, он позже не будет работать.
Заранее объявив функцию, вы предоставляете компилятору необходимую информацию для проверки в месте вызова.Если объявление присутствует и такая же ошибка сделана, компилятор обнаружит ошибку и сообщит вам о вашей ошибке.
В C ++, с другой стороны, компилятор не будет считать, что вызов правильный и на самом деле потребует от вас предоставить объявление функции перед вызовом.