2009-05-19 61 views
1

我已用于创建测试功能的以下几个Ç预处理器宏:如何删除这些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

工作的呢?我认为预处理器在一次传递中扩展宏... – 2009-05-19 09:44:50

0

尝试:

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