问题标签 [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 投票
5 回答
12723 浏览

objective-c - Objective-C 字符串文字的预处理器宏值

我在构建设置中定义了一个预处理器宏

我想将该值按摩到可以传递给方法的 Objective-C 字符串文字中。以下 #define 不起作用,但它应该展示我想要实现的目标:

我希望我只是以某种方式错过了明显的东西,但我似乎找不到合适的预处理器巫毒来获得我需要的东西。

0 投票
1 回答
137 浏览

macros - 无效的字符流宏

以下预处理器宏:

实际上不是有效的C;粗略地说,原因是预处理器被定义为处理令牌流,而上面假设它处理字符流。

另一方面,不幸的是,上述情况实际上发生在 Microsoft 头文件中,所以无论如何我都必须处理它。(我正在研究预处理器实现。)

人们在野外遇到了哪些其他情况,无论是遗留代码,只要该代码可能仍在使用中,预处理器宏实际上是无效的,但仍然可以工作,因为它们是在使用字符的编译器下编写的面向预处理器的实现?

(基本原理:如果我编写了一个适当的、符合标准的、面向令牌的正确干净的实现,我试图提前了解我将不得不破解多少特殊情况。)

0 投票
2 回答
3917 浏览

c - 在## 连接之前评估预处理器标记

我想在与其他东西连接之前评估一个令牌。“问题”是标准将行为指定为

在重新检查替换列表以查找要替换的更多宏名称之前,删除替换列表(不是来自参数)中的每个 ## 预处理标记实例,并将前面的预处理标记与下面的预处理标记连接起来。

因此在以下示例中,

最后一个声明扩展为

并不是

就像我想要的那样。有什么方法可以定义产生这个的宏吗?第一组宏可以,但我想避免前缀重复,并且只定义一次。那么是否可以设置前缀#define并让宏使用它?

0 投票
8 回答
169 浏览

c - 使用 C 预处理器读取变量

尝试将连接与C预处理器一起使用时,我遇到了以下问题:

预处理器有没有办法能够读取“i”上的值,而不仅仅是连接“vari”?

0 投票
5 回答
1870 浏览

gcc - 变量值的字符串化

问题:如何定义上述宏,以在 GCC 中打印字符串?

0 投票
3 回答
777 浏览

regex - 如何将修饰符添加到带引号的正则 (qr) 表达式

有没有一种简单的方法可以将 'i' 等正则表达式修饰符添加到引用的正则表达式中?例如:

我能想到的唯一方法是print "$pat\n"返回(?-xism:F(o+)B(a+)r)并尝试?-xism:用替换删除“i”

0 投票
1 回答
699 浏览

c - 在多级宏调用中对宏参数进行字符串化

我有一个这样的宏:

有用:

FOO+BAR=579这按预期打印。

现在我正在尝试定义一个调用 SHOW_EXPR 的宏:

这打印Look ma, 123+BAR=579,这也是预期的,但这不是我想要的。

是否可以定义 MY_SHOW_EXPR 以使其做正确的事情?

(实际的宏比这里显示的要复杂一些。我知道宏是邪恶的。)

0 投票
4 回答
2787 浏览

c++ - C/C++ 宏扩展为参数,参数为字符串

我有许多变量的名称与工程规范文档中的元素相同,因此名称的字符串版本也很有用。

我发现自己经常使用这样的宏:

典型用法是:

我的问题有三个:

  • 有没有更好的方法来做到这一点?
  • Boost 或其他库中是否有类似的宏?
  • 如果没有,我该如何改进和重命名它以使其清晰有用?

编辑 我应该说上面是一个最小的例子。该函数可能有其他参数,命名实体可能是数据成员,甚至可能是函数本身。

我正在为 C++ 考虑的另一个扩展是一个NamedRef可以接收宏内容的类。

0 投票
2 回答
370 浏览

c - 将常量粘贴到 asm 代码块中

我有这个C宏:

当我用整数调用它时效果很好:

但是,当我做这样的事情时:

我收到此错误:

错误:指令系统调用需要绝对表达式

我该如何解决这个问题?我不想让我的代码到处都是幻数。

0 投票
2 回答
215 浏览

c - 如何使 cmd 行中的 -D 值成为字符串?

我面临一个棘手的问题。我想根据编译器命令行伪造一个C源文件内容。例如(使用 VC):

如果我使用命令行

我希望获得实际的 C内容(预处理后):

如果我使用命令行

我希望获得实际的C源文件内容:

现在正在寻找解决方案...

第一次尝试:

- 没运气。无论 foo 在命令行上定义什么,我总是得到

第二次尝试(我能想象的最接近,但仍然很冗长):

这一次,我必须详细地更改我的命令行:

现在我明白了

有没有办法帮助我摆脱这种冗长的状态?

顺便说一句:我真的不喜欢在命令参数中引入引号(让它们成为argv[x].