Это действительно (ну, это может зависеть от того, какой стандарт вы используете). Вы должны прочитать что-нибудь о соглашениях о вызовах .
В принципе, если f
принимает один или нет аргументов, я бы не ожидал проблем.
Если f
принимает два или более аргументов, можно ожидать, что эти другие аргументы (кроме первого) будут иметь нежелательные (очевидно, случайные) значения.
Рассмотрим этот кусок кода:
int f(int x, int y);
int g(int x)
{
int k; //No value
if (x<0) return f(x, k);
else return f(x, x);
}
Конечно, это плохая идея. Вы должны предпочесть явно объявить все аргументы.
Вы также можете использовать int f(void);
, чтобы явно объявить, что f не принимает аргументов.
Имейте в виду, что перегрузка функций в C ++ может вызвать проблемы, но я предполагаю, что это не проблема, поскольку вы пометили свой вопрос c
.
Кроме того, некоторые соглашения о вызовах могут вызвать значительные проблемы.