Может ли 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
,
В частности, функция, которую вы объявили в заголовке, будет неопределенной, поскольку не имеет реализации. Любой код, который вызывает его, не будет компилироваться и ссылаться. Невозможно создать исполняемый файл, который вызывает функцию, которая никогда не была определена. Компилятор не знает, что делать, когда вызывается функция.