关于宏定义

c语言解除宏定义_C语言宏定义 C语言宏定义C语言既具有高级语言的功能,又具有低级语言的许多功能。那么大家知道C语言宏定义是怎样的呢?下面一起来看看!宏定义是预处理命令的一种,它允许用一个标识符来表示一个字符串。先看一个例子:#include#define N 100int main(){ int sum = 20 + N; printf("%d", sum); return 0;}运行结果:120该示例中的语句int sum ... 阅读详情


CMLog: 用它来代替NSLog:

#define CMLog(format, ...) NSLog(@"%s:%@", __PRETTY_FUNCTION__,[NSString stringWithFormat:format, ## __VA_ARGS__]);  

它的作用是将调用它的类和方法的名称一起输出到控制台。比如你在MyAppDelegate类的applicationDidFinishLaunching方法中调用它:

CMLog(@"My iPhone is an %@, v %@", [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion]);  

控制台将输出:

2009-01-05 10:06:28.957 MyApp15173:20b]   
     -[MyAppDelegate applicationDidFinishLaunching:]:  
My iPhone is an iPhone Simulator, v 2.2  

MARK: 此宏用于输出调用它的类和方法名称。适用于只想知道是否一个方法被调用了。

#define MARK    CMLog(@"%s", __PRETTY_FUNCTION__);  

START_TIMER和END_TIMER: 用于确定一个方法或一段代码的运行时间:

 #define START_TIMER NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate];    
#define END_TIMER(msg)  NSTimeInterval stop = [NSDate timeIntervalSinceReferenceDate];   
CMLog([NSString stringWithFormat:@"%@ Time = %f";, msg, stop-start]);  

将START_TIMER 置于需评测的代码段开始处,并将END_TIMER置于代码段结束处,你就可获得这段代码的运行时间:

复制代码
 - (NSData *)loadDataFromURL:(NSString *)dataURL    
{      
    START_TIMER;      
    NSData *data = [self doSomeStuff:dataURL];      
    END_TIMER(@"loadDataFromURL");      
    return data;    
}  
复制代码

输出为:

2009-01-05 10:31:37.943 MyApp[15283:20b] -[MyAppDelegate loadDataFromURL:]:  
loadDataFromURL Time = 3.636021    

将所有这些宏定义整理使用条件标志放在预编译的头文件中。调试时,此标志设为1 ,发布时将其设为0 。

复制代码
#if DEBUG==1    
   #define CMLog(format, ...) NSLog(@"%s:%@";, __PRETTY_FUNCTION__,[NSString stringWithFormat:format, ## __VA_ARGS__]);     
   #define MARK    CMLog(@"%s";, __PRETTY_FUNCTION__);    
   #define START_TIMER NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate];    
   #define END_TIMER(msg)  NSTimeInterval stop = [NSDate timeIntervalSinceReferenceDate]; 
CMLog([NSString stringWithFormat:@"%@ Time = %f";, msg, stop-start]);    
else    
   #define CMLog(format, ...)    
   #define MARK  #define START_TIMER    
   #define END_TIMER(msg)    
endif  
复制代码



在Debug目标设定中加入:

OTHER_CFLAGS = -DDEBUG=1    

在Release 目标设定中加入:

OTHER_CFLAGS = -DDEBUG=0 


原文地址:http://www.cnblogs.com/pengyingh/articles/2402977.html

Oracle EBS 中美国销售税的实现方式 Oracle EBS通过eBTax引擎实现美国销售税管理,需配置税务管辖区、税率及规则等要素,基于收货地址和商品分类计税。系统支持免税交易和使用税处理,但因美国税率复杂多变,建议集成Vertex等第三方服务自动更新税率。关键配置包括创建USSales Tax制度、维护地点层级及物料税务分类,同时需管理客户免税证书。对于跨国业务,系统也支持欧盟VAT等其他国家税制配置。 阅读详情

相关推荐

LoRa模块选型指南:正点原子ATK-LORA-01与SX1278芯片深度评测(含实测距离/功耗数据)

本文深度评测了正点原子ATK-LORA-01与SX1278芯片的性能表现,通过实测数据展示其在复杂环境中的通信距离与功耗表现。特别适合智慧农业、工业监测等物联网应用场景,提供详细的配置指南和优化技巧,帮助开发者实现高效、低功耗的LoRa通信解决方案。

weixin_29191081的博客 290

【C语言】宏定义(不带参数的宏定义和带参数的宏定义)

目录 一、不带参数的宏定义 1.定义 2.#undef 指令取消宏定义 二、带参数的宏定义 1.定义 2.宏定义参数替换的注意事项 三、带参数的宏定义和带参函数的区别 一、不带参数的宏定义 1.定义 在程序中,经常会定义一些常量,例如圆周率3.1415、“ABC”等。如果这些常量在程序中频繁使用,难免会出现书写错误的情况。为了避免程序书写错误,可以使用不带参数的宏定义来定义这些常量。 例如:#define PI 3.14159 解析:#define是用来标识一个宏定义,标识符PI是

Jacky_Feng的博客 6267

手把手教你用Simulink搭建IEEE33节点配电网模型(附赠两本电力系统书籍)

本文详细介绍了如何使用Simulink搭建IEEE33节点配电网模型,涵盖从基础配置到高级应用的完整流程。通过MATLAB脚本自动化参数注入、监测系统部署和典型应用场景实战,帮助读者快速掌握配电仿真模型的核心技术。附赠两本电力系统经典书籍资源,助力深入学习与研究。

weixin_29073241的博客 249

python执行excel宏并保存结果,python可以添加,运行和删除VBA宏,而无需中间保存步骤吗?...

我有一个长期运行的python管道,它生成一个pandas数据帧.简而言之,我想:>在excel中显示pandas数据帧>添加&运行VBA宏>删除VBA宏并将(新格式化的)输出另存为.xslx挑战在于,如果没有中间的save-as-xlsm文件步骤,我无法弄清楚如何执行此操作,这在将.V85宏添加到.xlsx文件时显然是必需的.由于这是低效的,我想摆脱这个中间步骤.这是代...

weixin_34524284的博客 617

机械臂学习:视觉引导——绪论

视觉引导 = 定位 + 引导定位:视觉系统定位到待引导的物体引导:视觉系统引导机械臂按需要的轨迹实现一定的工艺流程(过度点:人为指定机械臂的轨迹防止碰撞)(点云匹配:解决位姿估计姿态估计的问题)无序抓取的三个核心技术:3d识别(图中的点云匹配) 抓取方法路径规划(防止机械臂的碰撞,如自身碰撞等)如果只有同一高度的平移和旋转,其实并不需要点云,用单目就可以做,但是如果涉及到物体的倾斜以及高度的变换,那就是单目力所不能及,所以就是第三种情况:平移旋转加垫高。

2303_80018785的博客 4047

Halcon形状模板匹配实战:inspect_shape_model参数优化指南

本文深入解析Halcon形状模板匹配中inspect_shape_model参数的优化技巧,涵盖NumLevels和Contrast参数的实战应用。通过具体案例展示如何平衡匹配速度与精度,帮助开发者高效调试形状模型,提升工业视觉检测的准确性和效率。

weixin_30342209的博客 618

Informix集群

配置连接管理器 1.创建密码文件并加密 在$INFORMIXDIR/bin目录下创建文件passwords.txt的内容为: ifx_ids ifx_ids informix password1 ifx_hdr ifx_hdr informix password2 ifx_sds ifx_sds informix password3 运行以下命令加密该文件(12345...

u010378984的博客 712

树莓派 Raspberry Pi 使用 YOLOv8 YOLOv10 YOLOv11进行目标检测及推理加速,Run YOLOv8 YOLOv10 YOLOv11 on Raspberry Pi

libcamera 是 linux 新增加用于访问 camera 的 API。树莓派参与了 libcamera 的开发,并且在新的摄像头软件中开始从依赖于固件的摄像头图像处理管道(Image processing pipeline, ISP)迁移到更加开放的 libcamera。当然这块用USB 摄像头应该也是可以的。

shiter编写程序的艺术 5571

Python数据分析基础技术之pandas(史上最全面)

pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。简单地说,你可以把 Pandas 看作是 Python 版的 Excel。 ...

薛定谔的猫-前端领域 7万+

【异常】Codybuddy Error Code: 14003 too many requests 限流报错问题排查与解决指南

14003报错本质为服务端限流拦截,并非账号封禁或程序致命故障,90%以上的场景可通过等待冷却+规范使用行为解决。通过本文的排查步骤,可快速恢复工具使用,同时规避后续重复触发该问题。

奶爸的编程之路,也就一周冷个三天 1254

Nvidia Jetson平台 JP4.2.1版本GStreamer视频采集异常问题调试记录

Nvidia Jetson平台GStreamer in JP4.2.1不能采集但是 v4l2-ctl和 ffmpeg能正常采集视频。

jzwjzw19900922的博客 2127

C语言宏定义

C语言宏定义 基本介绍 1)#define 叫做宏定义命令它也是C语言预处理命令的一种,所谓宏定义,就是用一个标识符来表示一个字符串。如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串。 2)#define N 100 就是宏定义,N为宏名,100是宏的内容(宏所表示的字符串)。在预处理阶段,对程序中所有出现的“宏名”,预处理器都会用宏定义中的字符串区代换,这称为“宏替换”或“宏展开”。 宏定义是由源程序中的宏定义命令#define完成的,宏替换是由预处理程序完成的。 宏定义的形式 #defin

qq_45860879的博客 5万+

YOLOv8集成CPCA(Combined Parallel Convolutional Attention)注意力机制模块YOLOv8深度教程

YOLOv8集成CPCA注意力模块教程摘要 本教程详细介绍了如何将YOLOv8 CPCA(Combined Parallel Convolutional Attention)注意力模块集成到YOLOv8目标检测框架中。CPCA模块结合了通道注意力和多尺度空间注意力机制,通过全局池化和双路径融合增强通道特征,并利用多尺度深度可分离卷积捕获空间上下文信息。YOLOv8 教程包含完整的实现步骤:创建CPCA模块代码、修改YOLOv8模型解析逻辑、编写自定义配置文件,YOLOv8YOLOv8YOLOv8YOLOv8

FJN110的博客 1620

C语言——宏定义

一.预处理   编译一个C语言程序的第一步骤就是预处理阶段,这一阶段就是宏发挥作用的阶段。C预处理器在源代码编译之前对其进行一些文本性质的操作,主要任务包括删除注释、插入被#include进来的文件内容、定义和替换由#define 定义的符号以及确定代码部分内容是否根据条件编译(#if )来进行编译。”文本性质”的操作,就是指一段文本替换成另外一段文本,而不考虑其中任何的语义内容。宏仅仅是在C预处理阶段的一种文本替换工具,编译完之后对二进制代码不可见 二.宏定义用法 ①宏常量   我们最常使用到.

qq_44378854的博客 4万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

宏定义是什么?为什么要进行宏定义?宏定义的格式

宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。 宏定义和操作符的区别:宏定义是替换,不做计算,也不做表达式求解。宏定义又称为宏代换、宏替换,简称“宏”。在 C 语言中,宏是产生内嵌代码的唯一方法。对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法。 宏定义的格式:#DEFINE 标识符 字符串 掌握"宏"概念的关键是“换”,一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”,即在对相关命令或语句的含义和功能作具体分析之前就要换。

京京子小姐的博客 2万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++ 宏定义

———————— #define基本用法 ————————#define命令是C语言中的一个宏定义命令,它用来将一个标识符(宏名)定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。程序编译之前,编译的时候所有的宏名都会被定义的字符串替换,这便是宏替换。理解宏定义的关键在于 “替换”。该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。(1)简单的宏定义: #defi

shuzfan的专栏 4万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python宏定义_宏定义(无参宏定义和带参宏定义),C语言宏定义详解

宏定义是比较常用的预处理指令,即使用“标识符”来表示“替换列表”中的内容。标识符称为宏名,在预处理过程中,预处理器会把源程序中所有宏名,替换成宏定义中替换列表中的内容。常见的宏定义有两种,不带参数的宏定义和带参数的宏定义。无参宏定义无参数宏定义的格式为:#define 标识符 替换列表替换列表可以是数值常量、字符常量、字符串常量等,故可以把宏定义理解为使用标识符表示一常量,或称符号常量。说明:1)...

weixin_39573287的博客 1万+

关于宏定义的理解

什么是宏定义 #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。 该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。 补充:标识符——标识符是实体唯一标识,也就是实体名,比如变量名,函数名,类名,结构名等,都是标识符 (1)简单的宏定义: #define <宏名>  <字符串> 例: #define PI 3.1415926 (2) 带参数的宏定义 #define <宏名> (&l

修竹的博客 6633

宏定义函数

概念 在预编译阶段完成代码替换。 优势 (1)增加代码的可读性: 宏定义的优点很多,但我个人理解宏定义最明显的优点就是增加代码的可读性。求圆的面积, 用“PI * r* r”比 “3.14人r”的可读性就强很多了。 #define PI 3.14 float circleArea(float r) { return PI * r * r; } (2)自带“模版函数”的buff: 宏定义函数的参数没有数据类型,因此可轻松实现模板函数的功能 #define MAX(a, b) (a > b ? a

大海中的游鱼 1万+

C语言 宏定义

C语言 宏定义

qq_48516121的博客 1万+

宏定义(无参宏定义和带参宏定义),C语言宏定义详解

1、宏定义说明 宏定义是比较常用的预处理指令,即使用“标识符”来表示“替换列表”中的内容。标识符称为宏名,在预处理过程中,预处理器会把源程序中所有宏名,替换成宏定义中替换列表中的内容。 常见的宏定义有两种,不带参数的宏定义和带参数的宏定义。 2、无参宏定义 无参数宏定义的格式为: #define 标识符 替换列表 替换列表可以是数值常量、字符常量、字符串常量等,故可以把宏定义理解为...

diaochuanzhi7826的博客 2296

什么是宏定义?

1.不带参数的宏定义:       宏定义又称为宏代换、宏替换,简称“宏”。 格式: #define 标识符 字符串       其中的标识符就是所谓的符号常量,也称为“宏名”。 预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。 掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。 即在对相关命令或语句的含义和功能作具体分析之前就要换: 例: #def...

const 4万+

宏定义

题目描述 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。 输入 两个数,空格隔开 输出 交换后的两个数,空格隔开 样例输入 1 2 样例输出 2 1 #include #define Y(a,b) t=a;a=b;b=t;//两数交换位置 int main()

前景 2342

C语言宏定义和宏定义函数

要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。   在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍。   我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义:   #define MAX(

点滴积累 8293
上一篇: @CLASS 和 #IMPORT 的区别
下一篇: 使用 weak–strong dance 技术来避免循环引用
Panda_Samix_M
博客等级 码龄12年 2粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值