Sadece diğer dillerden gelen C++ öğretmeye başlıyorum. Bir (öğrenci) dosyası tarafından oluşturulan API'yi tutarlı bir şekilde kontrol etmenin bir yolunun olmasını diliyorum. Başlıklar Sanity
bir öğrenci bu dosyayı gönderir varsayalım: Aslında// this is stu.cpp
#include <iostream>
using namespace std;
double x(int y) {return y+0.5;}
, bazı diğer işlevi tanımlamak için öğrenci sorulan varsayalım int x (int). Bu kodu çalıştırarak bu kontrol edebilmek istiyorum:
// 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
}
Yani öğrencinin uygulanmasının gereğine arayüzünü eşleşti görmek çalışıyor ve ben ümit girişi 0. üzerinde test ediyorum
bu olmaz derlemek. Beng++ -Wall -Wconversion *.cpp -o gra
./gra
yaptığınızda Ama O derler ve ben ayrı ayrı iki dosya derlemek ve sonra bunları bağlamak bile bu durum kalır çıktı 0. vererek çökmesini olmadan çalışır.
nm
'un dönüş türlerini listelemediğini biliyorum. Bu, dönüş değerleri eşleşmediğinde iki dosyayı birbirine bağlayabilmemizin sebebi mi? Bunu test etmenin aklı başında bir yolu var mı? (Derleme zamanı gibi varsayımlar var mı?)
Ya da int ve double, interconvertible nedeniyle belirli bir hata mı? Bunu yakalayabilecek ek derleyici seçenekleri var mı?
// this is gra.cpp
#include "stu.h"
#include "stu.cpp"
#include <iostream>
using namespace std;
int main() {
cout << x(0); // test their code
}
Ve tabii sadece gra.cpp
derlemek:
stu.cpp 'stu.h' içeriyorsa bir hata alırsınız. –
Yup, '-Wall -Werror -Wextra' ile derlemelisiniz ve öğrencilere uygulayabilecekleri başlık dosyasını vermelisiniz ('# include'-ing içerir). –
'g ++ -flto -Wall -Wconversion * .cpp -o gra' ile çalışabilirsiniz –