ps: 我们项目中一直存在一坨宏,也不知道谁加上去的2333 #ifdefDEBUG#defineDLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )#defineALog(fmt, ...) NSLog(...
在上述代码中,我们定义了一个 DEBUG 宏定义,它用于控制是否编译调试信息。在 main 函数中,我们使用了 #ifdef DEBUG 指令来判断是否定义了 DEBUG 宏定义,如果定义了,则输出调试信息;否则只输出正常信息。宏定义中的多行代码 在宏定义中可以使用 \ 换行符将多行代码合并为一行。例如:在上述代码中,我们定义了...
C语言,调试必备的DEBUG宏定义 #include <stdio.h> #include <stdarg.h> //仅仅是打印函数名字替换 DEBUG <--> printf #define DEBUG(format, ...) printf(format, ##__VA_ARGS__) //替换打印函数,在打印出来的内容加上前缀 #define XFUNC_PRINT(format, arg...) printf("XFUNC: " format "", #...
1999年的ISO C标准里规定了可变参数宏,语法和函数类似,比如: #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 其中的"…"表示可变参数,实际调用时,它们会替代宏体里的__VA_ARGS__。GCC支持更复杂的形式,可以给可变参数取个名字,如下所示。 #define debug(format, args...) fprintf...
#define指令用于定义宏,例如:```C #define PI 3.1415926 ```在上述代码中,我们使用#define指令将PI定义为一个宏,并将其值设置为3.1415926。在程序中,我们可以直接使用PI来代表这个值。2. #ifdef / #ifndef / #endif #ifdef指令用于判断某个符号是否已经被定义,例如:```C #ifdef DEBUG printf("...
C语言,调试必备的DEBUG宏定义 1. #include <stdio.h>#include<stdarg.h>//仅仅是打印函数名字替换 DEBUG <--> printf#defineDEBUG(format, ...) printf(format, ##__VA_ARGS__)//替换打印函数,在打印出来的内容加上前缀#defineXFUNC_PRINT(format, arg...) printf("XFUNC: " format "", ##arg)/...
常量定义宏 1 使用#define定义常量 在C语言中,可以使用预处理器指令 #define 来定义常量。定义常量的语法如下: #define常量名 常量值 其中,常量名是定义的常量的名称,常量值是常量的值。
常量宏和 const 常量都可以用来定义常量,但它们之间存在一些差异。 类型安全性:常量宏是通过文本替换来实现的,它不会进行类型检查,因此可能存在类型不匹配的风险。而 const 常量是类型安全的,编译器会进行类型检查,能够提前检测出类型不匹配的错误,从而避免一些隐患。 可读性和可维护性:const 常量的可读性和可维护性...
「#ifdef 检查宏是否已经定义」:告诉 CPP 如果定义了 DEBUG,则执行处理语句。在编译时,可以向 gcc 编译器传递了 -DDEBUG 开关选型,实现在编译期间随时开启或关闭。 #ifdef DEBUG /* Your debugging statements here */ #endif 「#ifndef 检查宏是否还没有定义」:告诉 CPP 只有当 MESSAGE 未定义时,才定义 MESS...
代码debug阶段多加些打印方便定位,debug结束再依次删除打印比较麻烦。可以使用宏重新定义printf函数,需要打印时调用重定义的宏,用宏开关控制所有打印。注意需要使用变长参数函数式宏。 /* * PRINTF调试信息: * 使用:PRINTF(),打印调试log */#ifdefDEBUG#definePRINTF(format, ...) printf(format, ##__VA_ARGS_...