如何删除这些C宏之间的重复?
我有以下两个用于创建测试函数的C预处理器宏:如何删除这些C宏之间的重复?,c,macros,c-preprocessor,code-duplication,C,Macros,C Preprocessor,Code Duplication,我有以下两个用于创建测试函数的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) { // T
// 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
}
test(TestName, TestSuiteName) {
// Test code here
}
及
它是这样使用的:
test(TestName) {
// Test code here
}
test(TestName, TestSuiteName) {
// Test code here
}
如何删除两个宏之间的重复
#define test(name) testInSuite( name, TestSuite::active() )
然而,这并没有减少发出的C和机器代码的数量,只是删除了逻辑重复
但是,这不会减少发出的C和机器代码的数量,只会删除逻辑重复。尝试:
#define test(name) testInSuite (name, TestSuite::active())
尝试:
这行吗?我认为预处理器在一个过程中扩展了宏…@Matthew:宏是在可能的情况下扩展的,而不是在一个过程中,因此依赖宏链是可能的,可以用于创建几乎不可调试的代码@斯基兹:没错,修正了@尼尔·巴特沃斯:关于发出的代码是正确的,我同意你的观点,这个问题很难解决。但逻辑复制被优雅地删除了。我以为我已经尝试过了,但没有成功,但我显然感到困惑!如果你去掉后面的分号,我会接受这个答案。谢谢。同样重要的是,宏本身是无法替换的:#define X(a)X(a)不会导致无限递归:)这行吗?我认为预处理器在一个过程中扩展了宏…@Matthew:宏是在可能的情况下扩展的,而不是在一个过程中,因此依赖宏链是可能的,可以用于创建几乎不可调试的代码@斯基兹:没错,修正了@尼尔·巴特沃斯:关于发出的代码是正确的,我同意你的观点,这个问题很难解决。但逻辑复制被优雅地删除了。我以为我已经尝试过了,但没有成功,但我显然感到困惑!如果你去掉后面的分号,我会接受这个答案。谢谢。同样重要的是,宏本身无法替换:#define X(a)X(a)不会导致无限递归:)