2009-05-19 11 views
1

Iはテスト機能を作成するため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 
} 

2つのマクロ間の重複を削除するにはどうすればよいですか?

答えて

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

しかし、これは発行されたCとマシンコードの量を減らさず、論理的な重複だけを削除します。

+0

は、この仕事をしていますか?私はプリプロセッサが1回のパスでマクロを展開したと考えました... –

+0

おっと、args間違った方法ラウンド! – Skizz

+0

@Matthew:マクロは可能な限り拡張されています(シングルパスではありません)。従属マクロのチェーンが可能で、デバッグ可能なコードをほとんど作成できません。 @Skizz:それは固定です。 @Neil Butterworth:放出されたコードについては真であり、この問題はほとんど解決できないとあなたに同意します。しかし、論理的な複製はエレガントに削除されます。 – sharptooth

0

試してみてください。

#define test(name) testInSuite (name, TestSuite::active()) 
関連する問題