gpt4 book ai didi

c - 宏中的双斜线注​​释替换

转载 作者:行者123 更新时间:2023-12-02 05:38:09 26 4
gpt4 key购买 nike

我正在 ansi 兼容编译器(Microchip XC8)上开发 PIC MCU 程序。
有两种操作模式,在编译期间通过宏确定。
所以不想因为一行代码而复制一个类似函数的宏,我想知道是否有任何方法可以编写一个宏,例如

#define FOO //

这样当 FOO 被替换时,它实际上会取消该行的其余部分。

编写函数而不是宏是不可能的,因为函数调用产生的延迟会扰乱我的程序的严格计时(大约几微秒)。

最佳答案

你不能让宏展开来注释掉这一行,不。 //在宏定义中是定义之后的注释,它没有扩展,IIRC 有一条规则说你不能构造一个 //使用 token 粘贴。即使可以,扩展它也不意味着宏开始注释。基本上,您无法使用宏更改注释语法。

你可以这样做:

#if DO_NOTHING_MODE
#define FOO(ARG1)
#else
#define FOO(ARG1) ARG1
#endif

并像这样使用它:
#define FUNCTION_LIKE_MACRO(ARG1, ARG2) \
required line; \
FOO(optional line;) \

尽管更常见的习惯用法是将宏设计为接受表达式作为其参数,而不是整行:
#if DO_NOTHING_MODE
#define FOO(ARG1) ((void)0)
#else
#define FOO(ARG1) (ARG1)
#endif

并像 FOO(optional line); 一样使用它

无论哪种方式,如果宏参数中包含逗号,则调用者需要将它们括在括号中 FOO((1,2)) , 虽然在 C99 中你可以通过制作 FOO 来避免这种情况可变参数宏:
#define FOO(...) (__VA_ARGS__)

关于c - 宏中的双斜线注​​释替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11003338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com