Возможный дубликат:
является f (void), устаревшим в современных C и С++
Хорошо, поэтому я слышал разные мнения по этому вопросу и просто хочу убедиться, что правильно понял.
Для С++
Объявления void f(); и void f(void); означают точно то же самое, функция f не принимает никаких параметров. То же для определений.
Для C
Объявление void f(void); означает, что f не принимает никаких параметров.
Объявление void f(); означает, что функция f может иметь или не иметь параметров, и если это так, мы не знаем, какие параметры есть или сколько из них существует. Обратите внимание, что это НЕ то же самое, что и многоточие, мы не можем использовать va_list.
Теперь вот что интересно.
Случай 1
Декларация:
void f();
Определение:
void f(int a, int b, float c)
{
//...
}
Случай 2
Декларация:
void f();
Определение:
void f()
{
//...
}
Вопрос:
Что происходит во время компиляции в случаях 1 и 2, когда мы вызываем f с правильными аргументами, неправильными аргументами и без аргументов вообще? Что происходит во время выполнения?
Дополнительный вопрос:
Если я объявляю f аргументами, но определяю их без них, будет ли это иметь значение? Должен ли я обращаться к аргументам из тела функции?