Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.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_Macros_C Preprocessor - Fatal编程技术网

C 用于定义宏(如果未定义)的压缩版本

C 用于定义宏(如果未定义)的压缩版本,c,macros,c-preprocessor,C,Macros,C Preprocessor,我目前正在编写一组模块,其中的参数可以在编译时定义。对于每个值,我还指定了一个默认值,这样用户只需要定义他们想要更改的值。有一个用户定义的include文件,其中包含带有覆盖值的#define宏 在我的模块中,我使用 #include "user-defines.h" #include "module.h" 其中module.h包含默认定义 目前,我使用以下模式来定义module.h中的默认值 #ifndef somemacro #define some

我目前正在编写一组模块,其中的参数可以在编译时定义。对于每个值,我还指定了一个默认值,这样用户只需要定义他们想要更改的值。有一个用户定义的include文件,其中包含带有覆盖值的#define宏

在我的模块中,我使用

#include "user-defines.h"
#include "module.h"
其中module.h包含默认定义

目前,我使用以下模式来定义module.h中的默认值

#ifndef somemacro
#define somemacro "default value"
#endif
这是可行的,但意味着需要大量的额外输入。它也是三行而不是一行,放大了源代码


我的问题是,是否有一种更优雅的方法(例如,1行,不重复宏名称)仅在未定义的情况下定义默认值?

我用一个宏
default(x,y)
进行了实验,该宏编写宏代码但无法使其工作。它不会比三行更紧凑。不,您不能使用宏来编写新宏。您可以编写脚本,从更简单的文件创建头文件。或者,您可以在编辑器中使用“查找/替换”来执行此操作。第二,重新定义宏表明了错误的项目结构。我尝试了一个宏
DEFAULT(x,y)
,它编写宏代码,但无法使其工作。它没有比三行更紧凑的结构。不,您不能使用宏来编写新宏。您可以编写脚本,从更简单的文件创建头文件。或者,您可以在编辑器中使用“查找/替换”来执行此操作。第二,重新定义宏表明了错误的项目结构