草庐IT

x-macros

全部标签

c - 我怎样才能与 C 预处理器连接两次并扩展一个宏,如 "arg ## _ ## MACRO"?

我正在尝试编写一个程序,其中一些函数的名称取决于某个宏变量的值,宏变量如下:#defineVARIABLE3#defineNAME(fun)fun##_##VARIABLEintNAME(some_function)(inta);不幸的是,宏NAME()把它变成了intsome_function_VARIABLE(inta);而不是intsome_function_3(inta);所以这显然是错误的做法。幸运的是,VARIABLE的不同可能值的数量很少,所以我可以简单地执行#ifVARIABLE==n并分别列出所有情况,但是有没有聪明的方法来做到这一点? 最

c++ - 减少 C++(或 x-treme x-macros)中的代码重复

我在为游戏实现Lua接口(interface)时使用x-macros来减少重复和代码重复的数量Bitfighter.以下代码工作正常://FnnameValidparamprofilesProfilecount#defineTELEPORTER_LUA_METHOD_TABLE\TELEPORTER_LUA_METHOD_ITEM(addDest,ARRAYDEF({{PT,END}}),1)\TELEPORTER_LUA_METHOD_ITEM(delDest,ARRAYDEF({{INT,END}}),1)\TELEPORTER_LUA_METHOD_ITEM(clearDests

c++ - scanf/字段长度 : using a variable/macro, C/C++

如何在使用scanf时使用变量来指定字段长度。例如:charword[20+1];scanf(file,"%20s",word);此外,使用20+1是否正确(因为它需要在末尾添加\0?)。相反,我想要这样的东西:#defineMAX_STRING_LENGTH20然后charword[MAX_STRING_LENGTH+1];scanf(file,"%"MAX_STRING_LENGTH"s",word);//what'sthecorrectsyntaxhere..?这可能吗?如果它是一个变量怎么样:intlength=20;charword[length+1];scanf(file,

c++ - 翻转 MACRO(X)(Y) 中 X 和 Y 的顺序

我有一个基于C++宏的DSL,它定义了这样一个宏:#defineRETURNS(...)\enable_if_t#defineEAT_requires这是为了像这样使用:templateautosome_function(Tt)->RETURNS(int)(requiresSomeConcept)扩展为:templateautosome_function(Tt)->enable_if_t>(启用C++20概念时,这会扩展为真正的requires子句。)我希望翻转参数的顺序。也就是说,我希望它生成这个:templateautosome_function(Tt)->enable_if_t,

c++ - Xcode 6 : Set Preprocessor Macros per architecture

我想学习如何正确配置XcodeiOS项目,以便我可以为每个架构指定不同的预处理器宏。我的项目所依赖的C++库需要设置一个标志来告诉它们是在32位还是64位平台上运行。由于Apple现在要求所有提交都是32位和64位的,我不能再通过使用ARCHS_STANDARD_32_BIT和只使用一个32位配置来实现。XcodeUI似乎只允许我为每个构建类型(调试/发布)指定宏。而且我还没有在developer.apple.com上找到具体的解决方案。有没有一种方法可以在编译器中指定这些定义?我需要改用前缀header吗?如果是这样,是否有任何最佳做法?有没有人有神奇的CMAKE配置可以解决我所有的

ios - 如果 Macro 设置为 1,则排除目标中的类

我定义了一个预处理器宏,例如:#defineENABLE_SPECIAL_FEATURES1所以现在我可以在目标中包含或排除代码片段。但我希望有可能对一个完整的类(class)做同样的事情。因此,如果宏设置为“1”,则应包含或不包含该类。这可能吗?更新:框架是否可以使用相同的机制?! 最佳答案 只需将整个类声明(.h文件)和定义(.m)包装在该宏值中你的类.h:#ifENABLE_SPECIAL_FEATURES#import@interfaceYourClass:NSObject....@end#endif//ENABLE_SPE

Excel Macro:来自多个工作簿的复制表,具有添加的刷新功能

我希望将多个Excel文件中的表合并到一个具有刷新/更新功能的主文件中。更具体地说,一个文件夹中有25个工作簿,这些文件夹在结构上相同,并且根据实体而变化。每个文件都有一个表格,与文件的名称相同。每个实体每周都会使用最新的数字值更新其特定文件。我想创建一个宏,它将:从每个文件中复制一个工作表,然后将它们粘贴到一个“主”工作簿中。具有额外的功能,使我每周都可以“刷新”这些副本/粘贴选项卡。到目前为止,我有此代码:SubConslidateWorkbooks()'CodetopullsheetsfrommultipleExcelfilesinonefiledirectory'intomaster"

android - Google 跟踪代码管理器抛出 "invalid macro"消息

我一直在为移动设备试用Google跟踪代码管理器,特别是Android,但在尝试getString(myKeyValue)一个容器。这是我的MainActivity中的部分代码:@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);txtHello=(TextView)findViewById(R.id.txtHello);btn=(Button)findViewById(R.id

c++ - eclipse CDT : doesn't show name a macro appears in

当搜索宏引用时,Eclipse显示文件+引用宏的行。我想file+line+function.搜索其他类型的数据(例如函数)将按预期显示文件+行+函数,所以也许应该在Eclipse配置中为宏调整一些东西?有什么想法吗? 最佳答案 更新-2017年1月CDT的下一个版本(CDT9.3,将于2017年6月发布的EclipseOxygen的一部分)将支持显示包含宏引用的函数。参见Bug508216更多细节。此答案的其余部分是原始答案。长话短说EclipseCDT无法显示引用宏的函数,因为在构建索引时此类信息未包含在索引中。图片为确保我们谈

c++ - CPP : avoiding macro expansion of a macro function parameter

我想做的(为了记录目的)是这样的:编写这段代码是为了说明我的问题,实际代码很复杂,是的,即使在C++上我也有充分的理由使用宏=)#defineLIB_SOME1#defineLIB_OTHER2#defineWHERE"atfile#a,line#l,function#f:"//(lookforsyntaxhightlightingerroratSOxd)#defineLOG_ERROR_SIMPLE(ptr,lib,str)ptr->log("ERROR"str\"atlibrary"#lib);#defineLOG_ERROR(ptr,lib,str)LOG_ERROR_SIMPL