可以将整数变量附加到宏定义的函数上吗?
Can I attach an integer variable to a function defined by a macro?
我想使用宏将整数变量附加到函数名,但以下代码不起作用:
#define TEST(num) test_##num()
void test_0(void){ /* some code here*/ }
void somefunc(){
int somevar = 0;
TEST(somevar);
}
最后调用testrongomevar()。
我知道你可以创建一个数字的枚举并使用这个列表,但我不想这样做,因为它违背了我想要做的目的。
是否有一种方法可以有效地做到这一点?
运行时值不能被预处理器使用/看到,但您可以使用函数数组来做到这一点:
int main(int argc, char *argv[]) {
void (*test[1])(void) = { test_0 };
test[0]();
return 0;
}
或者,给定数组,您可以定义宏:
#define TEST(x) test[x]()
这不能工作,除非somevar
也是一个宏。
原因是因为TEST(somevar)
在预处理时被扩展为TEST_somevar
(假设您的宏工作正确),而some_var
的值直到(至少)编译时才知道,如果不是运行时。
另一种方法是使用一个函数指针数组,然后在该数组中使用一些索引不同的测试。
相关文章:
- 在命名空间中定义函数还是限定函数
- 使用 C/C++ 宏生成函数签名
- 为什么在定义函数之前先声明它
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 这个c++代码是如何在没有定义函数的情况下运行的
- 具有外部"c"和程序集的未定义函数
- 已定义函数时出现 G++ "未定义的引用"错误
- 将自定义函数传递到基抽象类中以延迟执行
- C++使用 rand 定义函数语法
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- C++宏定义和取消定义
- VS2017 #error: : snprintf 的宏定义与标准库函数声明冲突
- 遍历宏定义的函数
- 使用预处理器宏取消定义函数
- 让宏定义返回函数的值是不好的做法吗?
- 在define宏中使用typedef定义函数
- c++预处理器/宏在函数定义后自动添加行
- 可以将整数变量附加到宏定义的函数上吗?
- c++:复杂的类函数宏定义