일반적으로 tdesrt 드라이버를 허용하기 위해 main을 정의하기 위해 ifdefs를 추적하면 지루하고 지루하고 오류가 발생하기 쉽습니다.
덧글에 따르면 을 다른 .c
개의 파일에 main을 추가하고 동일한 파일을 포함하여 TEST
을 정의 할 수 있습니다. 그러나 세 번째 또는 그 이상의 테스트 드라이버가 있다면 어떻게 될까요?
내가 채택한 해결책은 간단하다, 항상 하나의 main
을 가지고 있지만 그것은 당신의 테스트가 main_test1
할 수있는 정규 주요 기능은 main_program
미터 호출 할 수 있습니다 예를 들어 주요 호출되지 않은 다른 main
기능 및 작은 측에 전화했다 테스트는 main_test_tiny_func
일 수 있습니다. 의도를 명확히하기 위해 일반적으로 모든 psudo-main 함수에 접두어를 붙입니다. main_
가끔씩 사용하려는 의사 메인을 전환하기 위해 주석을 사용했으나 엉망이되었습니다.
main.c를
int main(int argc, char *argv[])
{
#ifdef TEST1
return main_test1(argc, argv);
#else
#ifdef TINY_TEST
return main_test_tiny_func(argc, argv);
#else
return main_program(argc, argv);
#endif
#endif
}
다른 방법으로 당신은 당신이 많은 테스트
#ifndef TEST_TO_RUN
#define TEST_TO_RUN 0
#endif
int main(int argc, char *argv[])
{
switch(TEST_TO_RUN)
case 2:
return main_test1(argc, argv);
case 1:
return main_test_tiny_func(argc, argv);
case 0:
return main_program(argc, argv);
}
}
실행하는 런타임에 결정 때때로 유용이있는 경우 실행하는 테스트를 결정하는 매니페스트 상수를 설정할 수 있습니다 (예를 들어 회귀 테스트), 그 경우 위와 같은 스위치를 사용하여 결정할 첫 번째 인수를 먹습니다.
int main(int argc, char *argv[])
{
int test_no=atoi(argv[0]);
argc--; argv++;
switch(test_no)
case 2:
return main_test1(argc, argv);
case 1:
return main_test_tiny_func(argc, argv);
case 0:
return main_program(argc, argv);
}
}
'.......... mytest.h를 포함한 파일도 main 함수를 가지고 있기 때문에'헤더 파일'mytest.h'에는'main' 함수도 포함되어 있습니까? 나는 그것을 이해하지 못한다. –
아니요 mytest.h는 include 폴더에 있으며 주를 포함하지 않습니다. mytest.h를 포함하는 다른 소스 파일이 있습니다. –
다른 파일 (다른 'mytest.c')에있는 다른 주요 기능이 맞습니까? 그렇다면 어떤 조건이 참이라면'main'을 가능하게하는 조건을 넣으십시오. –