问题标签 [stringification]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 在C中将任何变量转换为字符串
是否可以将任何类型的任何变量转换为字符串?
我写了以下
#define TO_STRING(val) #val
这是将变量转换为字符串的有效方法吗?
c++ - 字符串化运算符失败
C和 C++ 标准都包含文本,大意是如果字符串化操作未能生成有效的字符串文字标记,则行为未定义。在 C++11 中,这实际上是可能的,方法是在原始字符串文字中包含换行符。但标准中始终存在包罗万象的内容。
有没有其他方法可以使字符串化产生 UB,而 UB 或格式错误的程序还没有发生?
我很想听听C或 C++ 的任何方言。我正在写一个预处理器。
c - 打印预处理器形成的变量标识符
如何检索从宏扩展的文本?
输出为:64,因为宏扩展为:
如何使用定义的粘贴宏将标识符 number2 打印为字符串。我需要知道如何 通过不直接写“number2”来创建输出: number2: 64我不想要这个解决方案:
我想要一个动态的解决方案。我尝试通过以下方式连接:
但它不起作用,因为粘贴宏返回的 number2 是一个标识符,一个整数如何检索为文本(字符串)?
c - 将 C 宏定义字符串连接到文字字符串
让第一行是:
现在,我需要将它与文字字符串常量连接起来;类似的东西:
c - C++的C预处理器宏中的#和##是什么意思
我阅读了以下代码:
我知道##
运算符用于将两个字符串合并为一个,但是and#
前面的呢?def
abc
c++ - 反向预处理器字符串化操作符
在一个 SDK 的一个包含文件中定义了许多宽字符串数字常量,我无法修改,但经常更新和更改。所以我不能用数字声明数字定义,因为它每隔几天就完全不同,我不想('不允许)应用任何脚本进行更新
如果反过来并且常量将被定义为一个数字,我可以简单地通过 # 预处理器运算符创建字符串。
我不会不使用 atoi 也不想制作任何变量,我只需要预处理器最好的数字形式的常量。
我知道没有反向字符串化运算符,但是没有任何方法可以通过预处理器将字符串转换为令牌(数字)吗?
c - 使用 __VA_ARGS__ 定义字符串化宏时出错
我一直在尝试在 C 中实现一个函数宏,该函数宏在参数前面加上“DEBUG:”,并将其参数传递给 printf:
这在 gcc 中给了我这个错误:
据说,它应该对格式进行字符串化,并将其变量参数传递给 printf,但到目前为止我无法克服这个错误。
编辑
在放弃字符串化参数和双重哈希(##
)之后,__VA_ARGS__
我现在遇到了这个错误:
我应该在参数后加逗号吗?
作为参考,DBG() 现在看起来像这样:
c - 访问具有相似名称的标识符的宏
假设您有许多标识符,例如 UARTxREG(其中 x 是一个数字)。
有没有办法编写宏,例如:
这样这将扩展到:
我可以这样做是将文字数字(1、2、3 等)传递给宏,但是当我尝试传入宏时,我遇到了宏无法正确扩展的问题。
我目前有:
然而这并没有扩大channel
。
macros - 将宏的参数字符串化为 unicode
我正在尝试对宏的参数进行字符串化,以便它给出 unicode 字符串,即我想要得到以下内容:
我的宏是这样的:
不幸的是不起作用。这个怎么做?
c++ - 如何对包含逗号的字符串进行字符串化?
我想在编译命令中传递一个版本字符串:
在我的代码中,我有以下内容:
这不起作用,因为VERSION
宏中有一个逗号,所以看起来我正在传递两个参数TOSTR()
(显然,宏只有在它作为一个唯一参数VERSION
传递给之后才会被扩展)。STRINGIFY()
我在这里找到的以下方法也不起作用:
因为这似乎与
也就是说,宏CONCAT()
不会被扩展。
注 1:我宁愿不在命令行中传递C字符串,因为版本字符串实际上是动态生成的,并且可能包含一些引号。这意味着仅仅编写g++ -D VERSION=\""$(GENERATED_STRING)"\"
而不是对传递的参数进行字符串化是行不通的。
注意 2:如果有人找到一种完全没有任何预处理器宏的方法,我会非常高兴。