저는 C++을 가르치기 시작했습니다. 다른 언어에서 온 것입니다. 나는 (학생) 파일로 작성된 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
을 할 때 그것은 컴파일 및 I 별도로 두 개의 파일을 컴파일 한 후이를 연결하는 경우에도이 사실로 남아 출력 0을주고, 충돌없이 실행됩니다.
나는 nm
에 반환 유형을 나열하지 않는다는 것을 알고 있습니다. 반환 값이 일치하지 않을 때 두 파일을 함께 연결할 수있는 동일한 이유가 있습니까? 이것을 시험 할 정상적인 방법이 있습니까? (컴파일 타임 형식의 어설 션이 있습니까?)
int와 double이 서로 변환 될 수 있기 때문에이 특정 버그입니까? 이것을 잡을 수있는 더 많은 컴파일러 옵션이 있습니까?
// this is gra.cpp
#include "stu.h"
#include "stu.cpp"
#include <iostream>
using namespace std;
int main() {
cout << x(0); // test their code
}
을 물론의 gra.cpp
컴파일 :
'stu.cpp'에'stu.h '가 포함되면 오류가 발생합니다. –
그래,'-Wall -Werror -Wextra'로 컴파일하고, 학생들에게 구현할 헤더 파일을 주어야합니다 ('# include '포함). –
당신은'g ++ -flto -Wall -Wconversion * .cpp -o gra' 시도 할 수 있습니다. –