在 C 宏中强制使用空格?

发布于 2024-08-13 16:51:19 字数 283 浏览 2 评论 0原文

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

#define CREATE_HOOK_STUB( func ) void ##func_STUB() { /* some code*/ }

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

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

I've got the following Macro to define a new function following a special naming scheme:

#define CREATE_HOOK_STUB( func ) void ##func_STUB() { /* some code*/ }

However, the preprocessor always concatenates void and ##func_STUB but I obviously want it to preserve the whitespace at that position.

I know that I could just prepend some string to ##func_STUB, but this is not what I want.
How would I solve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤君无依 2024-08-20 16:51:19

我认为你真正想要的更接近:

#define CREATE_HOOK_STUB( func ) void func##_STUB() { /* some code*/ }

但你还应该看看这个链接的SO答案其中有一些关于令牌粘贴操作符行为的附加细节:

当您使用标记粘贴('##')或字符串化('#')预处理运算符时需要注意的一件事是,您必须使用额外的间接级别才能使它们正常工作所有案例。

如果您不这样做,并且传递给标记粘贴运算符的项本身就是宏,您将得到的结果可能不是您想要的...

I think what you really want is closer to:

#define CREATE_HOOK_STUB( func ) void func##_STUB() { /* some code*/ }

But you should also look at this linked SO answer which has some additional details on the behavior of the token pasting operator:

One thing to be aware of when you're using the token-paste ('##') or stringizing ('#') preprocessing operators is that you have to use an extra level of indirection for them to work properly in all cases.

If you don't do this and the items passed to the token-pasting operator are macros themselves, you'll get results that are probably not what you want...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文