gpt4 book ai didi

c - 三元级联宏

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:44 25 4
gpt4 key购买 nike

我是 C 语言的新手,我正在尝试定义一个为 char* 设置前缀的宏(我仍然把它想象成一个字符串,我认为这可能是造成混淆的原因。)

#define setTxPrefix(xml, tx) (xml ? ("XML_" ## tx) : ("PSYS_" ## tx)) 

当 xml 为真时,我需要“XML_”前缀。否则我想要“PSYS_”前缀。我已经试过了

#define setTxPrefix(xml, tx) (xml ? ((char*)"XML_" ## tx) : ((char *)"PSYS_" ## tx)) 

我这样调用宏:

transaction = setTxPrefix(1, "TransactionString");

我得到的错误是“未找到用户定义的文字运算符”,但我真的不知道这里的用户定义文字是什么。对此的任何解释将不胜感激。

最佳答案

您必须使用 #tx 连接到现有字符串。在本例中为“XML_”或“PSYS_”。因此,宏的代码将是:

#define setTxPrefix(xml, tx) (xml ? ("XML_" # tx) : ("PSYS_" # tx)) 

调用宏的代码不应该有引号:

transaction = setTxPrefix(1, TransactionString);

如果宏中的字符串中有空格,那么您可以使用 C 的一个有趣的特性。即,源代码中的字符串连接变成程序中的连接字符串。所以你可以这样改变宏:

#define setTxPrefix(xml, tx) (xml ? ("XML_" tx) : ("PSYS_" tx)) 

调用宏的代码会有引号:

transaction = setTxPrefix(1, "TransactionString");

关于c - 三元级联宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35939130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com