14得票2回答
访问预处理器宏定义的值

如果在 GCC_PREPROCESSOR_DEFINITIONS(或者如果您使用 XCode,则是 Preprocessor Macros)下面添加了一个宏“FOO=bar”,那么访问“FOO”的最佳方法是什么? 目前,我使用的方法很笨拙: #define MACRO_NAME(f) ...

13得票1回答
如何在连接之前引起宏展开?

#define JNI_DECLARE( classname, methodname ) \ classname ## methodname( JNI* env ) #define JAVA_CLASS Java_com_example void JNI_DECLARE( JA...

13得票2回答
在##合并之前评估预处理器标记

我想在将一个token与其他内容串接之前对其进行求值。但是标准规定,行为应为: 在重新检查替换列表以替换更多宏名称之前,替换列表中每个“##”预处理符号(不来自参数)的每个实例都会被删除,并将前面的预处理符号与后面的预处理符号连接起来。 因此,在下面的示例中,#include &l...

13得票5回答
如何在宏中使用单引号引用参数?

我想创建一个C预处理器宏,用于给参数加上单引号。就像常用的#X一样。 我希望Q(A)被展开为'A'。 我正在Linux上使用gcc。 有人有想法吗? 我知道#是双引号。我正在寻找类似单引号的机制。

12得票3回答
使用__VA_ARGS__定义字符串化宏时出现错误

我一直在尝试在C语言中实现一个函数宏,它将"DEBUG: "添加到参数前,并将其参数传递给printf:#define DBG(format, ...) printf("DEBUG: " #format "\n", __VA_ARGS__) 使用gcc时出现了以下错误:src/include/...

12得票2回答
将第一级宏展开转换为字符串的C语言操作

这个C宏定义是否能够转化为字符串: #define GPIO_INT_PIN (GPIO_PORT_D|GPIO_PIN_IRQ_RISING|GPIO_PIN5) 使用类似于 MY_STRINGFY(GPIO_INT_PIN) 如何获取 "(GPIO_PORT_D|GPIO_PIN_IRQ...

12得票4回答
这个宏定义对编译器来说意味着什么?

考虑一下: #define STRINGIFY(A) #A 如果我之后写: STRINGIFY(hello) 编译器实际上是否看到了这个: #hello 我认为是在#A前面的额外井号让我感到困惑。

12得票3回答
如何在可变宏参数上使用C++预处理器字符串化?

我猜这个问题的答案是否定的,但如果有方法的话那就太好了。为了澄清,假设我有以下宏:#define MY_VARIADIC_MACRO(X...) // Does some stuff here in the macro definition 我想做的是在将X变量传递给可变参数函数之前对X中的所...

11得票1回答
在 #include 指令中的宏替换

我想要使用一个通过外部定义的宏来作为文件名传递给#include指令。 例如:#include #FILE".h" 其中 FILE 将被定义为字符串 MyFile(不含引号),从而导致#include "MyFile.h" 无法在此处使用字符串化操作符#,因为符号FILE不是宏参数。我尝试了...

10得票4回答
避免宏函数参数的宏展开:CPP

我想要做的事情(用于日志记录)类似于这样: 此代码已经编写为展示我的问题,实际代码很复杂,并且是的,即使在C++上我也有使用宏的充分理由 =)# define LIB_SOME 1 # define LIB_OTHER 2 # define WHERE "at file #a, line ...