Tag:

用于读取输入数据并检查其有效性的通用宏

我在Stack Overflow上看到许多类似的问题被重复,它们与从stdin读取一个输入数据项并检查其有效性有关。 数据可以是整数”%d” ,双”%f” ,字符串”%s” ,unsigned int “%u” …… 我想开发一个可以用于大多数问题的通用宏。 示例1的问题 OP可以问: 扫描输入数据 数据应该是整数,因此不允许11a , aaa , aa44 ,…输入。 只允许整数后跟一个空格(请参考isspace() ) 其他条件可能存在于以下问题中:输入整数应>3且<15 示例2的问题 OP可以问: 扫描输入数据 数据应该加倍,所以11.2a , aaa , aa44.3 ,……输入是不允许的。 只允许双后跟一个空格(请参考isspace() ) 其他条件可能存在于以下问题中:输入double应>3.2且<15.0 是否有可能像开发一个常见的宏 #define SCAN_ONEENTRY_WITHCHECK(FORM,X,COND) // FORM: format of the input data like “%d”, “%lf”, “%s” // X: address where to store the […]

如何在Objective-C宏中使用商业广告?

如何在Objective-C宏中使用商业广告? 我知道不推荐,但似乎有可能吗? 由于libextobjc提供@weakify , @strongify等…

Varargs`ELEM`宏用于C

我想知道是否一般使用ELEM比较宏,其中: (v == a || v == b) 可以替换为: ELEM(v, a, b) 当然这可以用宏来完成, #define ELEM(v, a, b) (((v) == (a)) || ((v) == (b))) 然而,您最终需要定义多个带参数计数的宏。 使用一个简单的python脚本我想出了这个: #define ELEM2(v, a, b) \ (((v) == (a)) || ((v) == (b))) #define ELEM3(v, a, b, c) \ (ELEM2(v, a, b) || ((v) == (c))) #define ELEM4(v, a, b, […]

C #include filename中的连接字符串

当#including文件名(在C中)时,是否可以从另一个宏连接字符串。 例如, 我有, #define AA 10 #define BB 20 这些参数随程序运行而变化 该文件包括: #include “file_10_20” // this changes correspondingly ie file_AA_BB 是否有可能以某种方式拥有#include “file_AA_BB”类的东西? 我用谷歌搜索发现双磅操作符可以连接字符串,但无法找到一种方法。 任何帮助,将不胜感激。

C中以下宏的副作用是什么? 嵌入式C

#define MIN(A,B) ((A) <= (B) ? (A) : (B)) 这是宏,我被问到如果我使用以下内容会产生什么副作用: least = MIN(*p++, b); 注意:这是嵌入式问题

用于计算参数数量的宏

我有来自第三方C库的可变参数函数: int func(int argc, …); argc表示传递的可选参数的数量。 我正在使用宏来计算参数的数量,如此处所示 。 为方便阅读,这里是宏: #define PP_ARG_N( \ _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, \ _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \ _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, \ _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, […]

宏扩展和字符串化:如何使用另一个宏来解析宏名称(而不是它的值)?

不感兴趣: #define _ACD 5, 5, 5, 30 #define DEFAULT_NETWORK_TOKEN_KEY_CLASS _ACD #define DEFAULT_NETWORK_TOKEN_KEY { DEFAULT_NETWORK_TOKEN_KEY_CLASS } 仅使用DEFAULT_NETWORK_TOKEN_KEY_CLASS宏,如何在const unsigned char []中获取字符串化的_ACD。 const uint8 startMsg[] = ?? DEFAULT_NETWORK_TOKEN_KEY_CLASS ; 只会导致_ACD 。 在这里获取_ACD的正确宏扩展是什么? 在如何将具有数组的宏字符串化为#define a_macro {5,7,7,97}的上下文中?

C:使用令牌粘贴扩展宏

所以这里有一些我创建的宏: #define MODULE_NAME moduleName #define MODULE_STRUCT MODULE_NAME ## _struct #define MODULE_FUNCTION(name) MODULE_NAME ## _ ## name 在这些定义之后,我希望发生以下扩展: MODULE_STRUCT –> moduleName_struct MODULE_FUNCTION(functionName) –> moduleName_functionName 但是,当我添加令牌粘贴运算符时,MODULE_FUNCTION和MODULE_STRUCT中的MODULE_NAME的扩展不再发生……在将它们粘贴在一起时,似乎将MODULE_NAME视为文字字符串。 有没有解决的办法?

对C宏扩展和整数运算感到困惑

可能重复: 一个谜语(在C中) 关于以下代码段,我有几个问题: #include #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0])) int array[] = {23,34,12,17,204,99,16}; int main() { int d; for(d=-1;d <= (TOTAL_ELEMENTS-2);d++) printf("%d\n",array[d+1]); return 0; } 这里代码的输出不会按预期打印数组元素。 但是当我添加一个(int)的类型转换时,ELEMENTS的宏定义为 #define TOTAL_ELEMENTS (int) (sizeof(array) / sizeof(array[0])) 它按预期显示所有数组元素。 这种类型转换是如何工作的? 基于此,我有几个问题: 如果我有一些宏定义,这是否意味着: #define AA (-64) 默认情况下,在C中,所有定义为宏的常量都等同于signed int 。 如果是,那么 但是,如果我必须强制在宏中定义一些常量,因为unsigned int是否有任何常量后缀而不是我可以使用(我试过UL,UD既不起作用)? 如何在宏定义中定义常量以表现为unsigned int?

C offsetof宏如何工作?

可能重复: 为什么这个C代码有效? 你如何在struct上使用offsetof()? 我在互联网上读到了这个偏移宏,但它没有解释它的用途。 #define offsetof(a,b) ((int)(&(((a*)(0))->b))) 它想做什么以及使用它有什么好处?