Tag: macros

Foreachmacrosmacros参数

我想知道是否有可能编写一个macros的foreachmacros参数。 这是什么想要做的: #define PRINT(a) printf(#a": %d", a) #define PRINT_ALL(…) ? ? ? THE PROBLEM ? ? ? 和可能的用法: int a = 1, b = 3, d = 0; PRINT_ALL(a,b,d); 这是我迄今取得的成就 #define FIRST_ARG(arg,…) arg #define AFTER_FIRST_ARG(arg,…) , ##__VA_ARGS__ #define PRINT(a) printf(#a": %d", a) #define PRINT_ALL PRINT(FIRST_ARG(__VA_ARGS__)); PRINT_ALL(AFTER_FIRST_ARG(__VA_ARGS__)) 这是一个recursionmacros,这是非法的。 另一个问题是recursion的stop condition 。

我可以重新定义一个C ++macros,然后定义它?

我在我的代码中同时使用了JUCE库和一些Boost头文件。 Juce将“T”定义为一个macros(呻吟),Boost经常在其模板定义中使用“T”。 结果是,如果你在Boost头文件之前包含了JUCE头文件,预处理程序就会在Boost代码中扩展JUCEmacros,然后编译器就会失去希望。 在大多数情况下保持我的包含顺序并不困难,但是当你有一个JUCE类包含一些其他的类,并且链上的某个文件包含了Boost,并且它之前的任何文件需要一个JUCE包括你有麻烦。 我最初的希望在于解决这个问题 #undef T 之前任何包括提升。 但问题是,如果我不重新定义它,那么其他代码会感到困惑,“T”没有被声明。 然后我想,也许我可以这样做一些循环的#define技巧: // some includes up here #define ___T___ T #undef T // include boost headers here #define T ___T___ #undef ___T___ 丑,但我认为它可能工作。 可悲的是。 我在使用“T”作为macros的地方出现错误 '___T___' was not declared in this scope. 有没有办法使这两个库可靠地一起工作?

我怎样才能在C预处理器中生成唯一的值?

我正在写一堆相关的预处理macros,其中一个生成另一个跳转到的标签。 我以这种方式使用它们: MAKE_FUNNY_JUMPING_LOOP( MAKE_LABEL(); MAKE_LABEL(); ) 我需要一些方法来生成独特的标签,每个内部MAKE_LABEL调用一个预处理器。 我尝试过使用__LINE__ ,但是由于我在另一个macros里面调用了MAKE_LABEL ,它们都有相同的行并且标签发生了碰撞。 我想要扩展到这样的东西: MAKE_FUNNY_JUMPING_LOOP( my_cool_label_1: // from first inner macro … my_cool_label_2: // from second inner macro … ) 有预处理器生成散列或自动递增整数的方法吗?

Swift中的macros?

Swift目前是否支持macros,还是有未来计划添加支持? 目前我正在散射: Log.trace(nil, function: __FUNCTION__, file: __FILE__, line: __LINE__) 在我的代码中的各个地方。

从名称实例化类?

想象我有一堆C ++相关的类(所有扩展相同的基类和提供相同的构造函数),我在一个共同的头文件(我包括),以及他们的一些其他文件(我编译和链接静态作为我的程序的一部分)。 我想能够实例化其中的一个传递名称,这是一个参数,必须传递给我的程序(作为命令行或作为编译macros)。 我看到的唯一可能的解决scheme是使用macros: #ifndef CLASS_NAME #define CLASS_NAME MyDefaultClassToUse #endif BaseClass* o = new CLASS_NAME(param1, param2, ..); 这是唯一有价值的方法吗?

__FILE__macros显示完整path

C中可用的标准预定义MACRO __FILE__显示文件的完整path。 有什么方法可以缩短path吗? 我的意思是,而不是 /full/path/to/file.c 我懂了 to/file.c 要么 file.c

iOS如何通过macros来检测iPhone X,iPhone 6 plus,iPhone 6,iPhone 5,iPhone 4?

如何通过macros来检测设备模型? 我曾经使用过类似的东西,但模拟器上的结果总是IS_IPHONE_5 #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) #define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0) #define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0) #define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f) #define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0) #define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0)

C代码中的“: – !!”是什么?

我在/usr/include/linux/kernel.h中碰到这个奇怪的macros代码: /* Force a compilation error if condition is true, but also produce a result (of value 0 and type size_t), so the expression can be used eg in a structure initializer (or where-ever else comma expressions aren't permitted). */ #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); })) 什么:-!! 做?

在C中实现generics交换macros

可能重复: 是否有一个相当于c中的std :: swap() 嗨伙计, 我试图在C编写一个通用的交换macros的问题,我的macros看起来像这样: #define swap(x,y) { x = x + y; y = x – y; x = x – y; } 它适用于整数和漂浮,但我不确定是否有任何捕获。 如果通过genericsmacros,他们是指交换指针,字符等? 任何人都可以帮我写一个通用的macros来交换每一个input? 谢谢

cmake:何时引用variables?

我第一次写CMakemacros,而且我很难理解variables是如何工作的。 最具体地说,$ {a}似乎与“$ {a}”有不同的含义。 例如这里: 将一个列表传递给一个cmakemacros 我不明白什么时候应该加引号,什么是更大的基本原则。