Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中定义一个定义?_C_C Preprocessor - Fatal编程技术网

如何在C中定义一个定义?

如何在C中定义一个定义?,c,c-preprocessor,C,C Preprocessor,是否可以编写一个定义#define的#define 例如: #define FID_STRS(x) #x #define FID_STRE(x) FID_STRS(x) #define FID_DECL(n, v) static int FIDN_##n = v;static const char *FIDS_##n = FID_STRE(v) 但是: #define FID_DECL2(n, v) #define FIDN_##n v \

是否可以编写一个定义
#define
#define

例如:

#define FID_STRS(x) #x
#define FID_STRE(x) FID_STRS(x)
#define FID_DECL(n, v) static int FIDN_##n = v;static const char *FIDS_##n = FID_STRE(v)
但是:

#define FID_DECL2(n, v) #define FIDN_##n v \
                               FIDS_##n FID_STRE(v)

FID_DECL
工作正常,但会创建两个静态变量。是否可以使FID_DECL2工作并定义两个定义?

否;预处理在单个过程中执行。如果您希望或需要更高级的行为,请考虑使用另一个工具对源进行预处理,如M4.0./P>
此外,替换列表中的
#
(在
#define FIDN…
的开头)将被解析为
#
(stringize)运算符:此运算符的操作数必须是一个命名的宏参数,而
define
不是。

否在定义宏时,u应该注意一件事 该宏也不应直接调用自身(递归) 或者间接地

我知道两个消耗8字节的静态变量对于u是可扩展的

我有解决办法

#define FID_STRS2(x) #x
#define FID_STRE(x) FID_STRS2(x)
#define FID_DECL(n, v) static int FIDN_##n = v;static const char *FIDS_##n = FID_STRE(v)

只需将它们重新命名为“两个静态变量”这有什么问题?@James:两个静态变量都可以,除了我想与我的字符串联系的字符串定义:FID_DECL(HELLO,2)printf(“HELLO world”FIDS_HELLO)->“HELLO world2”您可以从其他内容生成C代码,例如使用功能更强大的预处理器,如
m4
,或者问题是用户是否可以在宏中定义新宏,而不是他们是否可以在宏中使用宏。