Если я просто сделаю это: Пример 1:
#include <iostream>
int main()
{
//try to call doSomething function
doSomething();
}
void doSomething()
{
std::cout << "Call me now!" << std::endl;
}
Я получаю ошибку компиляции! Потому что компилятор не знает, что такое "doSomething".
Но если я изменю позицию doSomething на первое место, программа успешно скомпилируется. Пример 2:
#include <iostream>
void doSomething()
{
std::cout << "Call me now!" << std::endl;
}
int main()
{
//try to call doSomething function
doSomething();
}
Я могу объявить прототип следующим образом: Ex3:
#include <iostream>
void doSomething(void);
int main()
{
//try to call doSomething function
doSomething();
}
void doSomething()
{
std::cout << "Call me now!" << std::endl;
}
Но почему первый пример не работает? Почему я должен сначала объявлять прототип или вызывать функции, а затем основную функцию?
Спасибо!
void
в списке аргументов функции не является обязательным для C++; записьvoid doSomething();
эквивалентнаvoid doSomething(void);
. В C (не знаю, относится ли это к C99) первое указывает на функцию, которая может принимать неопределенное количество аргументов, но в C++ это означает, что функция не принимает никаких аргументов. - person Praetorian   schedule 20.11.2011