Функции с пустым списком параметров в C99 не совместимы с C ++ 98?

Это код, скомпилированный с GCC (с -std = c99) и G ++ (с -std = c ++ 98):

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

GCC успешно скомпилировал код, но G ++ придумал следующее:
error: too many arguments to function ‘int fun()’
Я полностью сбит с толку.
Я знал, что C ++ должен быть совместим с C по замыслу, но этот случай показывает мне несовместимость. Этот случай происходит по замыслу?

2

Решение

В C пустой список параметров означает, что вы не указываете, сколько аргументов принимает функция. Чтобы определить функцию с 0 параметрами, вы должны использовать (void) как список параметров. В C ++ пустой список параметров означает, что функция принимает 0 параметров, поэтому да, C и C ++ не совместимы в этом случае.

Я знал, что C ++ должен быть совместим с C по замыслу, но этот случай показывает мне несовместимость. Этот случай происходит по замыслу?

Хотя C ++ совместим с C во многих случаях, это не всегда так. Другими примерами являются неявные приведения void* (разрешено в C, но не в C ++) и ключевые слова (вполне допустимо использовать что-то вроде class как имя переменной в C, но, очевидно, не в C ++, где это ключевое слово). И да, это по замыслу.

5

Другие решения

В с ++

void fun();

означает функцию, не имеющую аргументов.
Чтобы сообщить это на C напишите

void fun(void); // also works in c++ but it's frowned upon
4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector