问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言当中的#ifdef DEBUG, #define ,#else,#endif等的意义

发布网友 发布时间:2022-05-06 19:18

我来回答

3个回答

热心网友 时间:2023-09-12 10:07

1、#define 是宏定义

1.1宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。宏定义其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。
1.2如 define int MAX;
那么你在写程序时:MAX i; 就和int i; 完全一样;因为编译预处理器会把所有的MAX替换成int。优点:有利于程序阅读和修改,自己可以仔细体会。
2、#ifdef 一看意思就是个条件判断语句。等于 #if define( 标识符1)
#ifdef 标识符
程序段1
#else
程序段2
#endif
它的功能是,如果标识符已被#define 命令定义过则对程序段1 进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else 可以没有,即可以写为:
#ifdef 标识符
程序段
#endif
第二种形式:
#ifndef 标识符
程序段1
#else
程序段2
#endif
与第一种形式的区别是将“ifdef”改为“ifndef”。它的功能是,如果标识符未被#define 命令定义过则对程序段1 进行编译,否则对程序段2 进行编译。这与第一种形式的功能正相反。
第三种形式:
#if 常量表达式
程序段1
#else
程序段2
#endif
它的功能是,如常量表达式的值为真(非0),则对程序段1 进行编译,否则对程序段2 进行编译。因此可以使程序在不同条件下,完成不同的功能。
至于#elif 命令意义与else if 相同,它形成一个if else-if 阶梯状语句,可进行多种编译选择。

热心网友 时间:2023-09-12 10:08

#ifdef DEBUG
是判断 DEBUG头文件是否已经存在,ifdef(if define)
存在就执行
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8 *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
void assert_failed(u8* file, u32 line);
返回失败并找到在哪里定义了,

否则执行
#define assert_param(expr) ((void)0)

热心网友 时间:2023-09-12 10:08

这些是预编译开关的使用

#ifdef YOUR_FLAG
/*part1*/
#else
/*part2*/
#endif

根据YOUR_FLAG的是否已经宏定义,来执行不同的设置。如果已经定义了YOUR_FLAG,则使用并编译part1部分,否则使用part2部分。

像你这里,要使用实际有功能的使用assert_param,则需要在在这个头文件之前加上:
#define DEBUG
然后还需要自己编写void assert_failed(u8* file, u32 line);的定义体。
如果不需要使用实际意义的assert_param,则不需要使用#define DEBUG,如果其他地方有了这个宏定义,你也得删掉或注释掉。

一般的,
if(condition) do_something1;
else do_something2;
这些是编译过程中会把程序转换成汇编语句和二进制执行语句。
而#ifdef FLAG
#else
#endif
是在编译之前的预编译阶段完成的(可能有些编译器没预编译的功能,那就在编译阶段完成)。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
长沙到西昌。坐火车先从长沙到成都、成都东,再到西昌,哪个方便一些 S先生与P先生谜题的题面 为什么首都设在襄阳 改姓可以不随父母性吗 韩艺瑟怎么改姓? 纸、墨、笔、砚是中国传统的文房四宝,墨的使用最早在 [ ] A.商代后期... 想问下创维光伏E企赢模式有哪些优势,到底值不值得投资啊?有没有合作... 太平洋太享e保百万医疗值得入手吗?每年花多少钱? 爱e满分适合哪些人买?注意哪些问题? 太平洋太享e保百万医疗适合哪些人买?价格多少? C语言#ifdef的问题!!!求大神解答 若夫日出而林霏开,云归而岩暝翻译是什么? C语言的#ifdef和#if defined 的区别 若夫日出而林霏开,云归而岩穴暝,晦明变化者,山间之朝暮也怎样翻译_百 ... C++#ifndef与#ifdef的区别是什么? 朝而往,暮而归 的而 什么意思 《醉翁亭记》中“云归而岩穴暝”一句中的“而”的意思 C语言的#ifdef 和 if defined 的区别 C语言 #ifdef #endif 是什么意思? 若夫日出而林霏开,云归而岩穴瞑,晦明变化者,山间之朝暮也。 翻译意思... c语言中 #ifdef ...... 和#endif 配套使用的方法 ? 云归而岩石瞑 归是什么意思 请问C语言中的预处理命令ifdef是什么意思 醉翁亭记中的“朝而往暮而归”中的“而”是什么意思 日出而林霏开 “而”的意思和用法 若夫日出而林霏开,云归而岩穴暝,而啥意思 云归而岩穴冥,而字什么意思 《醉翁亭记》中而字的用法 云归而岩穴暝的而是什么意思 云归而岩穴暝,而字什么意思 C++ 关于#ifdef c语言中#if defined是什么含义 怎么用 华帝油烟机不通电了 C语言结构体中用ifdef来控制变量列表 我家的油烟机是华帝的,前几天断电后清洗了一下外表,再通电指示灯就不亮了,也不能工作了,不知道为什么 C语言中的条件编译 #if define(宏名称)为什么错误了? C++中#if #ifdef 的作用 华帝油烟机灯自动一会亮一会灭也不工作了 前端是iPhone6s 索尼xbaz5和铁三角im04哪个好 家里耳机不小心弄坏了想重买一款,索尼耳机XBA-Z5听感肿么样?想入手求速解! 为什么移动网络无服务? 怎么做才能最快瓣下玉米种子? 苹果5s一打开移动数据就没信号无服务,以前是好的。想知道是手机的问题还是卡的问题 为什么我的移动卡开数据流量就会无服务关了数据流量又有信号了? 换手机试过也是一样的结果 新款哈弗H6 Coupe上市了,售价为7.99-11.90万元 离婚之后,人会变得很自卑,你有这样的感觉吗? 离婚对女人有哪些心理伤害?离异女性如何进行自我心理调节? 电脑百度云客户端为什么突然不能看视频了 让孩子树立正确的三观,要怎么教育? 如何培养孩子三观