Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除这些C宏之间的重复?_C_Macros_C Preprocessor_Code Duplication - Fatal编程技术网

如何删除这些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

我有以下两个用于创建测试函数的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
}
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)不会导致无限递归:)