提问人:Jens Petersen 提问时间:11/16/2023 更新时间:11/16/2023 访问量:27
C 预处理器:串化多级类似函数的宏
C preprocessor: stringizing multiple levels of function-like macros
问:
我正在使用多个级别的宏,在这些宏中,我依赖于参数的字符串化。我自己的函数已经有相当多的参数,将它们串起来有效地使参数数量增加了一倍。不是世界末日,但我想知道是否有更好/更干净的方式来使用预处理器传递我需要的信息。
这是我自己的代码的基本版本。您可以看到,要通过宏传递宏的名称和数值,我需要为每个宏传递一个参数。
https://godbolt.org/z/eMvaa5rs1
#define ID_1 0x12340000 | 0x00005678
#define func2(val) printf("func2 valname: %s, valstr: 0x%x\n", #val, val)
#define func3(val_str, val) printf("func3 valname: %s, valstr: 0x%x\n", val_str, val)
#define func1a(val) func2(val)
#define func1b(val) func3(#val, val)
#define FUNCTION(value) printf("Name: %s \nValue: %i", #value, value)
int main(void){
func1a(ID_1);
func1b(ID_1);
}
输出:
func2 valname: 0x12340000 | 0x00005678, valstr: 0x12345678
func3 valname: ID_1, valstr: 0x12345678
func3 的输出是我正在寻找的,但如果不传递两倍的参数,我似乎无法完成此操作。我认为这是唯一的方法,但我认为问问也无妨。
希望至少,这有助于某人了解使用字符串化参数时发生的情况。
谢谢!
答: 暂无答案
评论