2009-05-19 4 views
1

내가 만드는 테스트 기능 C 사전 프로세서 매크로의 다음과 같은 몇 가지있다 :이러한 C 매크로 간의 중복을 제거하려면 어떻게해야합니까?

// Defines a test function in the active suite 
#define test(name)\ 
    void test_##name();\ 
    SuiteAppender test_##name##_appender(TestSuite::active(), test_##name);\ 
    void test_##name() 

과 같이 사용되는 :

test(TestName) { 
    // Test code here 
} 

// Defines a test function in the specified suite 
#define testInSuite(name, suite)\ 
    void test_##name();\ 
    SuiteAppender test_##name##_appender(suite, test_##name);\ 
    void test_##name() 

가되는 것입니다 다음과 같이 사용 :

test(TestName, TestSuiteName) { 
    // Test code here 
} 

두 매크로 간의 중복을 제거하려면 어떻게해야합니까?

답변

6
#define test(name) testInSuite(name, TestSuite::active()) 

그러나 이것은 단지 논리적 인 중복을 제거 출사 C 기계 코드의 양을 감소시키지 않는다.

+0

이 일을합니까? 전처리 기가 단일 패스에서 매크로를 확장한다고 생각했는데 ... –

+0

으악, args 틀린 방법 라운드! – Skizz

+0

@Matthew : 단일 패스가 아닌 매크로를 확장 할 수 있으므로 종속 매크로 체인이 가능하며 디버깅 할 수있는 코드를 거의 만들지 못합니다. @Skizz : 맞습니다. @Neil Butterworth : 방출 된 코드에 대해서는 사실이며이 문제를 거의 해결할 수 없다는 점에 동의합니다. 그러나 논리적 인 복제는 우아하게 제거됩니다. – sharptooth

0

시도 :

#define test(name) testInSuite (name, TestSuite::active())