问题标签 [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 编程:预处理器,宏作为标记
我正在尝试做一些在概念上与此类似的事情,但似乎无法让它工作(最后显示错误)任何想法?
c - C宏中的强制空格?
我有以下宏来定义一个遵循特殊命名方案的新函数:
但是,预处理器总是连接void
,##func_STUB
但我显然希望它保留该位置的空白。
我知道我可以在前面加上一些字符串##func_STUB
,但这不是我想要的。我将如何解决这个问题?
c++ - CPP:避免宏函数参数的宏扩展
我想做的(用于记录目的)是这样的:
编写此代码是为了显示我的问题,实际代码很复杂,是的,即使在 C++ 上我也有充分的理由使用宏 =)
LOG_ERROR_SIMPLE()
写入 lib 参数的字符串化(由“”包围的宏名称)
但随后LOG_ERROR
写入已扩展的宏的字符串化(“2”)。这是意料之中的,因为 lib 在扩展和调用LOG_ERROR_SIMPLE
. 但这不是我需要的。
基本上我的问题是:如何在调用另一个宏函数时避免宏函数参数的宏扩展?
我使用了一个技巧来避免宏扩展:
(粘贴 x 和 lib 生成LIB_OTHER
,此值用于调用LOG_ERROR_SIMPLE
,在调用之前未扩展宏)
有什么方法可以在不使用技巧的情况下获得相同的行为?
jquery - 将 jQuery 对象和内容转换为字符串?
我正在抓取各种 jquery 对象以放入数组中,然后以 HTML 形式输出。
我正在尝试将 jQuery 对象转换为文本字符串,以便以后可以将其作为 HTML 吐出。
我目前正在使用这种技术:
但是,这似乎只是在抓取我的对象的内容。
例如,如果<h2>My Title</h2>
上面的 $myObject 仅返回“我的标题”(无 H2 标签)。
我也尝试使用 .text() 但得到相同的结果。
有没有办法将整个 jQuery 对象转换为文本字符串?
c - ## 对 C(C++) 预处理器意味着什么?
我在下面有一个C程序:
当我只运行预处理器时,它会将其扩展为
这就是输出为 100 的原因。
谁能告诉我预处理器如何/为什么扩展var##12 to var12
?
gcc - 如何单引号宏中的参数?
我想创建一个将单引号参数的C预处理器宏。就像常用的一样#X
。
我想Q(A)
扩大到'A'
.
我在 Linux 上使用 gcc。
有人有想法吗?
我知道#
双引号。我正在寻找一种类似的单引号机制。
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 相同的结果?我宁愿不创建具有全范围标记的第二个字符串,因为我必须为每个宏维护两个宏,这不是很方便并且可能导致错误。另外,我还需要每个字符串的窄版本,所以不幸的是,使用全宽字符串也不是一种选择。
c - 无效的预处理器令牌警告消息
我有一堆来自供应商工具的生成函数需要我定义。由于这些功能中的每一个的内部功能都完全相同,我想我可以使用宏来让我的生活更轻松。
这是有问题的警告:
现在,我将宏定义如下:
然后在我的代码中写:
...等等
关于为什么会发生这种情况的任何想法?
c-preprocessor - 为什么预处理器给一个空间?
我想使用预处理器注释一行:
当我这样做时,$gcc -E filename.c
我期望
但我得到了
以便编译器显示错误
为什么它给了一个不需要的空间?
c++ - 如何在#ifdef 中执行宏扩展?
我有一些相当通用的代码,它使用预处理器宏将某个前缀添加到其他宏上。这是一个非常简单的例子:
“prefix_”实际上是在别处定义的,因此每次包含文件时都会有所不同。它运行良好,但现在如果其中一个令牌不存在,我想跳过一些代码,但这不起作用:
我希望它扩展为:
但我不知道怎么做。我需要使用 MY_VAR() 宏来进行扩展,所以我不能只硬编码名称。(实际上是用于一些测试代码,每次测试一堆类时,相同的代码都会包含不同的前缀,我想跳过少数几个类的测试。)
C++ 预处理器可以做到这一点吗?
更新:
这里有一些半编译的代码来进一步演示这个问题:(为了避免把它挤进下面的评论)