问题标签 [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.

0 投票
3 回答
3514 浏览

c - C 编程:预处理器,宏作为标记

我正在尝试做一些在概念上与此类似的事情,但似乎无法让它工作(最后显示错误)任何想法?

0 投票
1 回答
3810 浏览

c - C宏中的强制空格?

我有以下宏来定义一个遵循特殊命名方案的新函数:

但是,预处理器总是连接void##func_STUB但我显然希望它保留该位置的空白。

我知道我可以在前面加上一些字符串##func_STUB,但这不是我想要的。我将如何解决这个问题?

0 投票
4 回答
6243 浏览

c++ - CPP:避免宏函数参数的宏扩展

我想做的(用于记录目的)是这样的:

编写此代码是为了显示我的问题,实际代码很复杂,是的,即使在 C++ 上我也有充分的理由使用宏 =)

LOG_ERROR_SIMPLE()写入 lib 参数的字符串化(由“”包围的宏名称)

但随后LOG_ERROR写入已扩展的宏的字符串化(“2”)。这是意料之中的,因为 lib 在扩展和调用LOG_ERROR_SIMPLE. 但这不是我需要的。

基本上我的问题是:如何在调用另一个宏函数时避免宏函数参数的宏扩展?

我使用了一个技巧来避免宏扩展:

(粘贴 x 和 lib 生成LIB_OTHER,此值用于调用LOG_ERROR_SIMPLE,在调用之前未扩展宏)

有什么方法可以在不使用技巧的情况下获得相同的行为?

0 投票
5 回答
26909 浏览

jquery - 将 jQuery 对象和内容转换为字符串?

我正在抓取各种 jquery 对象以放入数组中,然后以 HTML 形式输出。

我正在尝试将 jQuery 对象转换为文本字符串,以便以后可以将其作为 HTML 吐出。

我目前正在使用这种技术:

但是,这似乎只是在抓取我的对象的内容。

例如,如果<h2>My Title</h2>上面的 $myObject 仅返回“我的标题”(无 H2 标签)。

我也尝试使用 .text() 但得到相同的结果。

有没有办法将整个 jQuery 对象转换为文本字符串?

0 投票
4 回答
13741 浏览

c - ## 对 C(C++) 预处理器意味着什么?

我在下面有一个C程序:

当我只运行预处理器时,它会将其扩展为

这就是输出为 100 的原因。

谁能告诉我预处理器如何/为什么扩展var##12 to var12

0 投票
5 回答
5006 浏览

gcc - 如何单引号宏中的参数?

我想创建一个将单引号参数的C预处理器宏。就像常用的一样#X

我想Q(A)扩大到'A'.

我在 Linux 上使用 gcc。

有人有想法吗?

我知道#双引号。我正在寻找一种类似的单引号机制。

0 投票
3 回答
6007 浏览

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

我正在做一个项目,我有许多由连接(数字等)形成的常量字符串。

例如,我有一个LOCATION宏,它可以格式化__FILE____LINE__转换成一个字符串,当打印消息或错误时,我可以使用它来了解我在代码中的位置:

所以,这将格式化一个像“file.cpp(42)”这样的位置。问题是当我尝试将结果转换为宽字符串时:

这适用于 GCC,并导致 L"file.cpp(42)" 被插入到我的代码中。但是,在使用 MSVC++(使用 Visual C++ 2008 Express)尝试此操作时,出现错误:

我知道L前缀只会添加到我的表达式中的第一个术语。我也试过这个:

哪个“有效”,但给出的字符串L"\"file.cpp\" \"(\" \"42\" \")\""显然不是很方便(也不是我想要的),特别是考虑到这个宏与其他宏相比很简单。

所以,我的问题是:我怎样才能让它应用于 MSVC++ 中的整个表达式,这样我才能得到与 GCC 相同的结果?我宁愿不创建具有全范围标记的第二个字符串,因为我必须为每个宏维护两个宏,这不是很方便并且可能导致错误。另外,我还需要每个字符串的窄版本,所以不幸的是,使用全宽字符串也不是一种选择。

0 投票
1 回答
581 浏览

c - 无效的预处理器令牌警告消息

我有一堆来自供应商工具的生成函数需要我定义。由于这些功能中的每一个的内部功能都完全相同,我想我可以使用宏来让我的生活更轻松。

这是有问题的警告:

现在,我将宏定义如下:

然后在我的代码中写:

...等等

关于为什么会发生这种情况的任何想法?

0 投票
5 回答
233 浏览

c-preprocessor - 为什么预处理器给一个空间?

我想使用预处理器注释一行:

当我这样做时,$gcc -E filename.c我期望

但我得到了

以便编译器显示错误

为什么它给了一个不需要的空间?

0 投票
3 回答
2943 浏览

c++ - 如何在#ifdef 中执行宏扩展?

我有一些相当通用的代码,它使用预处理器宏将某个前缀添加到其他宏上。这是一个非常简单的例子:

“prefix_”实际上是在别处定义的,因此每次包含文件时都会有所不同。它运行良好,但现在如果其中一个令牌不存在,我想跳过一些代码,但这不起作用:

我希望它扩展为:

但我不知道怎么做。我需要使用 MY_VAR() 宏来进行扩展,所以我不能只硬编码名称。(实际上是用于一些测试代码,每次测试一堆类时,相同的代码都会包含不同的前缀,我想跳过少数几个类的测试。)

C++ 预处理器可以做到这一点吗?

更新:

这里有一些半编译的代码来进一步演示这个问题:(为了避免把它挤进下面的评论)