Я только начинаю преподавать С++, исходя из некоторых других языков. Я хочу, чтобы был некоторый способ последовательно проверять API, созданный (студенческим) файлом.
Предположим, что ученик отправляет этот файл:
// this is stu.cpp
#include <iostream>
using namespace std;
double x(int y) {return y+0.5;}
Собственно, предположим, что я попросил ученика определить некоторую другую функцию int x (int). Я хотел бы проверить это, запустив этот код:
// this is stu.h
int x(int);
// this is gra.cpp
#include "stu.h"
#include <iostream>
using namespace std;
int main() {
cout << x(0); // test their code
}
Итак, я пытаюсь понять, соответствует ли реализация студенту требуемому интерфейсу и тестирует его на входе 0. Я бы надеялся, что это не скомпилируется. Но когда я делаю
g++ -Wall -Wconversion *.cpp -o gra
./gra
Он компилируется и запускается без сбоев, выдавая результат 0. Это остается верным, даже если я скомпилирую два файла отдельно и свяжу их после.
Я знаю, что nm
не отображает типы возвращаемых данных. По той же причине мы можем связать два файла, когда возвращаемые значения не совпадают? Есть ли разумный способ проверить это? (Например, существуют ли утверждения типа типа compile-time?)
Или это конкретная ошибка из-за того, что int и double являются взаимопревращаемыми? Есть ли дополнительные параметры компилятора, которые могли бы поймать это?