我想定义一个包含另一个头文件的宏,如下所示:#defineMY_MACRO(text)#include"__FILE__##_inline.inl"这样当预处理器解析文件person.h时,MY_MACRO(blahblah)扩展为#include"person.h.inline.inl"关于如何做到这一点的任何提示? 最佳答案 无法使用#define构造其他预处理器指令,除非您运行预处理器两次。但在您的情况下,即使运行两次预处理器也无济于事,因为#include必须是"..."形式的单个字符串或.
我想定义一个包含另一个头文件的宏,如下所示:#defineMY_MACRO(text)#include"__FILE__##_inline.inl"这样当预处理器解析文件person.h时,MY_MACRO(blahblah)扩展为#include"person.h.inline.inl"关于如何做到这一点的任何提示? 最佳答案 无法使用#define构造其他预处理器指令,除非您运行预处理器两次。但在您的情况下,即使运行两次预处理器也无济于事,因为#include必须是"..."形式的单个字符串或.
在sourcecodeofstdbool.h在LLVM项目中,它显示为:/*Don'tdefinebool,true,andfalseinC++,exceptasaGNUextension.*/#ifndef__cplusplus#definebool_Bool#definetrue1#definefalse0#elifdefined(__GNUC__)&&!defined(__STRICT_ANSI__)/*Define_Bool,bool,false,trueasaGNUextension.*/#define_Boolbool#defineboolbool#definefalsef
在sourcecodeofstdbool.h在LLVM项目中,它显示为:/*Don'tdefinebool,true,andfalseinC++,exceptasaGNUextension.*/#ifndef__cplusplus#definebool_Bool#definetrue1#definefalse0#elifdefined(__GNUC__)&&!defined(__STRICT_ANSI__)/*Define_Bool,bool,false,trueasaGNUextension.*/#define_Boolbool#defineboolbool#definefalsef
根据N3092(C++11最终委员会草案),在16.3:宏替换中,类对象宏定义为:#defineidentifierreplacement-listnew-lineandfunction-likemacroisdefinedas:#defineidentifierlparenidentifier-list_opt)replacement-listnew-line#defineidentifierlparen...)replacement-listnew-line#defineidentifierlparenidentifier-list,...)replacement-listnew-
根据N3092(C++11最终委员会草案),在16.3:宏替换中,类对象宏定义为:#defineidentifierreplacement-listnew-lineandfunction-likemacroisdefinedas:#defineidentifierlparenidentifier-list_opt)replacement-listnew-line#defineidentifierlparen...)replacement-listnew-line#defineidentifierlparenidentifier-list,...)replacement-listnew-
我一直在看codegolf并想出了尝试这段代码的想法:#defineD#define添加此行后,一切正常,但是我将其扩展为:#defineD#defineDVALUE在这里我得到了5个编译错误。如果我将D更改为#define一切都很好,谁能解释一下,为什么这段代码是非法的?注意:我使用的是VS2008编译器。编辑:经过一些回答,我发现我需要提供编译错误列表:错误C2121:“#”:无效字符:可能是宏扩展的结果错误C2146:语法错误:缺少';'在标识符“VALUE”之前错误C4430:缺少类型说明符-假定为int。注意:C++不支持default-interrorC2144:语法错误:
我一直在看codegolf并想出了尝试这段代码的想法:#defineD#define添加此行后,一切正常,但是我将其扩展为:#defineD#defineDVALUE在这里我得到了5个编译错误。如果我将D更改为#define一切都很好,谁能解释一下,为什么这段代码是非法的?注意:我使用的是VS2008编译器。编辑:经过一些回答,我发现我需要提供编译错误列表:错误C2121:“#”:无效字符:可能是宏扩展的结果错误C2146:语法错误:缺少';'在标识符“VALUE”之前错误C4430:缺少类型说明符-假定为int。注意:C++不支持default-interrorC2144:语法错误:
我有一个包含这样一些行的源文件;#defineARC_V2_LP_START0x002#defineARC_V2_LP_END0x003#defineARC_V2_STATUS320x00a所有值都很好地对齐。不幸的是,clang-format会这样做;#defineARC_V2_LP_START0x002#defineARC_V2_LP_END0x003#defineARC_V2_STATUS320x00a我找到了AlignConsecutiveDeclarations和AlignConsecutiveAssignments选项,但没有任何东西可以对齐连续的#defines。可以这样
我有一个包含这样一些行的源文件;#defineARC_V2_LP_START0x002#defineARC_V2_LP_END0x003#defineARC_V2_STATUS320x00a所有值都很好地对齐。不幸的是,clang-format会这样做;#defineARC_V2_LP_START0x002#defineARC_V2_LP_END0x003#defineARC_V2_STATUS320x00a我找到了AlignConsecutiveDeclarations和AlignConsecutiveAssignments选项,但没有任何东西可以对齐连续的#defines。可以这样