stringification相关内容

用于创建字符串的 C 宏

替代标题(帮助搜索) 将预处理器标记转换为字符串 如何从 C 宏的值中生成字符字符串? 原始问题 我想在编译时使用 C #define 来构建文字字符串. 字符串是为调试、发布等而更改的域. 我想要一些这样的东西: #ifdef __TESTING#define IV_DOMAIN domain.org//内部测试#elif __LIVE_TESTING#defi ..
发布时间:2022-01-11 19:24:08 其他开发

与 C 预处理器“字符串化"相反

当使用 C 预处理器时,可以像这样对宏参数进行字符串化: #define TO_STRING(x) "带有 " #x 的字符串 等使用时,结果如下: TO_STRING(test) 将扩展为:"a string with test" 有什么方法可以反其道而行之吗?获取字符串文字作为输入参数并生成 C 标识符?例如: TO_IDENTIFIER("some_identifier ..
发布时间:2022-01-11 19:23:06 其他开发

如何使用 C 预处理器将连接的字符串转换为宽字符?

我正在做一个项目,其中有许多由连接(数字等)组成的常量字符串. 例如,我有一个 LOCATION 宏,它可以将 __FILE__ 和 __LINE__ 格式化成一个字符串,我可以用它来知道我所在的位置打印消息或错误时的代码: #define _STR(x) # x#define STR(x) _STR(x)#define LOCATION __FILE__ "(" STR(__LINE__ ..
发布时间:2021-12-22 18:35:36 C/C++开发

## 预处理器运算符的应用和需要考虑的问题是什么?

正如我之前的许多问题中所提到的,我正在使用 K&R,目前正在使用预处理器.更有趣的事情之一—从我之前尝试学习 C 的任何尝试中我从未知道的东西 -mdash;是 ## 预处理器运算符.根据 K&R: 预处理操作符##提供了一种连接实际的方法宏扩展期间的参数.如果一个替换文本中的参数是与 ## 相邻,参数为替换为实际参数,## 和周围的空白是删除,并重新扫描结果.例如,宏 paste连接它的两 ..

有没有办法在可变参数宏参数上使用 C++ 预处理器字符串化?

我猜这个问题的答案是否定的,但如果有办法就太好了.为了澄清,假设我有以下宏: #define MY_VARIADIC_MACRO(X...)//在宏定义中做一些事情 我想做的是在将 X 的所有变量传递给可变参数函数之前以某种方式对其进行字符串化;这里的关键字是之前.我意识到无法从宏定义中真正访问各个参数,但是有没有办法将所有参数字符串化,可能类似于以下内容? #define MY_VARIA ..
发布时间:2021-11-17 05:09:00 C/C++开发

C预处理程序字符串化(再次)

在进行数字求值之后是否可以进行 stringification ? 这可以通过一个简单的例子更好地解释: #define A 1#定义B 2#定义总和(A + B)#定义STR_IMPL_(x)#x#定义STR(x)STR_IMPL_(x)char * sum = STR(SUM); 按照本文所述,将生成单行: char * sum =“(1 + 2)"; 是否可以以某种方式 ..
发布时间:2021-04-24 21:02:10 其他开发

预处理程序宏值到Objective-C字符串文字

我在构建设置中定义了预处理器宏 FOO = BAR 我想把这个值转换为可以传递给方法的Objective-C字符串文字.以下#define不起作用,但应演示我正在尝试实现的目标: #define FOOLITERAL @"FOO"//希望FOOLITERAL具有@"BAR"的值myMethodThatTakesAnNSString(FOOLITERAL); 我希望我只是以某种方式缺 ..

GNU C预处理器:字符串化宏评估的结果

我有一个通用的字符串宏,如果可能的话,我想将其转换为一个长度值字符串,所有都在宏内,因此所有内容都以.rodata结尾. #define PAYLOAD "xyz" #define PAYLOAD_LEN (sizeof(PAYLOAD)-1) 我想将PAYLOAD_LEN用作字符串,例如在另一个字符串的一部分中. const char lv_macro[] = " ..
发布时间:2020-07-10 02:09:00 其他开发

将成员变量名称转换为字符串

我可以枚举C ++中的类(或结构)的char*个成员吗?如果可以,我可以将变量名称打印为字符串吗?使用预处理器? 我有一个具有所有const char *成员的类.最好有一种优雅的方法来枚举每个成员变量,并根据我得到的字符串键将名称检查为字符串. 这是可以使用的那种代码? 有人能想到一种方法吗? class configitems { public: configit ..
发布时间:2020-07-10 02:07:57 C/C++开发

编译器通过此宏看到了什么?

考虑一下: #define STRINGIFY(A) #A 如果我以后再写: STRINGIFY(hello) 编译器实际上看到了吗? #hello 我认为是#A前面的其他哈希值使我感到困惑. 解决方案 否,编译器会将参数放在引号之间,结果是: "hello" 但是请注意,宏替换不会发生在#和##附近,因此,如果您确实需要对参数进行字符串化处 ..
发布时间:2020-07-10 02:07:47 其他开发

在##串联之前评估预处理器令牌

我想先评估一个令牌,然后再将其与其他对象连接. “问题"是该标准将行为指定为 在重新检查替换列表之前,需要更多的宏名称 替换,替换中##预处理令牌的每个实例 列表(不是从参数中删除)并进行前面的预处理 令牌与以下预处理令牌串联. 因此在以下示例中, #include struct xy { int x; int y; }; struct ..

Stringify C预处理

这是我的第一篇文章,因此,如果我太含糊或提供每个人都可以凭直觉假设的信息,请告诉我. 我对使用 C 进行写作非常陌生,只是想更好地了解预处理.我正在编写一个简单的程序,该程序可以直接使用gcc -Wall -std=c99 -DSEED=argument从控制台输入参数,其中我的参数应为整数,或者如果未定义-D,则用户将输入它. SEED值仅在srand()中使用.我很困惑,如果我输入 ..
发布时间:2020-07-10 02:06:42 其他开发

使用C预处理器将int连接到字符串

我试图弄清楚如何使用 C 预处理器将#define'd int连接到#define'd字符串.我的编译器是CentOS 5上的GCC 4.1.该解决方案也应该适用于MinGW. 我想在字符串上附加一个版本号,但是唯一可以使它起作用的方法是将版本号的副本定义为字符串. 我能找到的最接近的东西是引用宏参数的方法,但不适用于#define s 这是行不通的. #define MA ..
发布时间:2020-07-10 02:06:38 其他开发