Вызов функций C с неопределенным количеством параметров - PullRequest
0 голосов
/ 14 апреля 2019

Обратите внимание, что этот вопрос не относится к многоточию.

Рассмотрим следующий код

#include <stdio.h>

void foo() {
    printf("I AM AWESOME\n");
}

main(void) {
    foo(1,2,3);
    foo();
return 0;
}

Эта программа отлично работает и выдает результат.Тем не менее, в случае «main», это работает независимо от

main(void)

или

main()

Когда, определяя foo как

foo(void)

выдает ошибку - «слишком много аргументов».

Если оба являются функциями, разве они не должны следовать тем же правилам?

Ответы [ 3 ]

3 голосов
/ 14 апреля 2019

Когда вы объявляете функцию без параметров, это означает отключение проверки типов и использование соглашения о вызовах K & R. Это не значит, что функция не имеет параметров.

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

1 голос
/ 14 апреля 2019

foo (void) не принимает аргументов (!!!), тогда как foo () принимает неопределенное количество аргументов!

0 голосов
/ 14 апреля 2019

также есть что-то еще в C, называемое переменным числом аргументов

 void foo(int x, ...)

https://www.geeksforgeeks.org/variable-length-argument-c/

...