Возможный дубликат:
является 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
аргументами, но определяю их без них, будет ли это иметь значение? Должен ли я обращаться к аргументам из тела функции?