Может ли Visual C++ проверить несоответствующий прототип и реализацию?

Может ли компилятор VC предупредить, если он не может найти реализацию прототипа?

Пример (обратите внимание на несоответствие параметров):

// calcSomething.h
int calcSomething(
    int    year,
    int    month,
    int    day,
    int    hour,
    int    minute,
    int    second
);

а также

// calcSomething.cpp
int calcSomething(
    int    year,
    int    month,
    int    day
) 
{
  // ... implementation
}

Обновление: по-видимому G++ имеет переключатель под названием -Wmissing-declarations который, я думаю, может соответствовать тому, что мне нужно, но, очевидно, для VC++.

2 ответа

Решение

Похоже, ответ - нет. Компилятор MSVC не имеет опции, эквивалентной -Wmissing-декларациям G ++.

Параметры командной строки по категориям.

Эти две функции совершенно разные, согласно правилам языка C++.

Компилятор должен реагировать так же, как если бы имя первой функции было calcSomething и имя второго было calcSomeOtherThing,

В частности, функция, которую вы объявили в заголовке, будет неопределенной, поскольку не имеет реализации. Любой код, который вызывает его, не будет компилироваться и ссылаться. Невозможно создать исполняемый файл, который вызывает функцию, которая никогда не была определена. Компилятор не знает, что делать, когда вызывается функция.

Другие вопросы по тегам