0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言:条件编译及预定义符号知识详解

C语言编程学习基地 来源:未知 作者:李倩 2018-03-31 09:20 次阅读

一.预定义符号

C标准定义了如下五个预处理符号

在文件输入输出以及输出日志等场合下我们会用到这些预处理符号,比如

\+回车 : 续行符,转义字符,后面不能加任何除回车之外的字符,否则会报错

二.#define关键字

#define有两个作用,一个是定义标识符,第二个是定义宏

1.定义标识符

不要在define定义的标识符里加分号

2.定义宏

#define机制包括一个规定,允许把参数替换到文本中,这种实现通常叫做宏或定义宏

宏定义永远不要吝啬括号,防止因为优先级的问题导致出现不可思议的后果 宏不能实现递归 宏只文本替换,并不简化计算 字符串中的内容不会发生宏替换

3.#和 ##

编译器会自动就两个相邻字符串自动连接成一个

#:把参数插入到字符串中

#a -> “a”

##可以把位于它两边的符号拼成一个符号

4.宏和函数对比

①宏没有类型检查

没有类型检查是宏的一大特点(但同时也是不安全的隐患),可以完成很多函数不可能做到的功能

②宏没有函数的调用和返回等额外开销,效率更高,

但是当逻辑复杂并且代码量巨大时,调用和返回的开销和运算的时间相比微乎其微,可以省略

③宏单纯只是文本替换,不能进行调试,很致命

④宏可能会使代码长度增长

⑤函数的参数如果是一个表达式,会计算出表达式的结果传入参数

宏的参数如果是一个表达式,只会文本替换,不会进行计算

总结:各有千秋,小代码量使用宏,大代码量使用函数,C++中摈弃宏这一概念,使用内联,基于优缺点,最好不要使用宏

5.带有副作用的宏参数

不要给宏参数传入带有副作用的参数

6.命名约定

宏:全部大写

函数: 不全部大写

例外

#undef name //取消宏标识符name的定义

三.条件编译

1.如果定义了DEBUG,语句执行,反之,不执行

2.条件编译

3.多分支条件编译

3.判断是否被定义

4.嵌套指令

预处理指令可以进行嵌套

四.其它

1.头文件的包含

2.#error “…”

遇到#error便会产生一个编译错误

3.strcpy();

源字符串必须以’/0’结束,返回目标字符串地址且这个函数不管目标空间是否放得下返回的目标字符串

4.assert(条件语句)

善用断言,头文件为

5.链式反应

这次函数的返回值可以作为下一个函数的参数,达到链式反应的效果

printf(“%d\n”,strlen(strcpy(p,”hello world!”)));

6.常见错误:

编译型错误

直接看编译器错误提示信息即可 链接型错误

函数名,变量名写错,库文件使用错误(第三方库) 运行时错误

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7589

    浏览量

    135766
  • 编译器
    +关注

    关注

    1

    文章

    1614

    浏览量

    49006

原文标题:C语言#define关键字,条件编译及预定义符号知识详解

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    几款C语言编译器推荐

    一些刚开始接触C语言编译的网友想下载一款C语言编译器来使用,不过,网络上有不少
    发表于 09-05 09:19 1w次阅读

    C语言定义与枚举类型知识

    定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。在简单的程序使用带参数的宏定义可完成函数调用的功能,又能减少系统开销,
    发表于 10-11 17:34 1533次阅读

    C语言预定义宏的用法和使用场景

    C语言中,预定义宏是由编译器提供的一组特殊标识符,可以在程序中直接使用,无需进行额外的定义
    发表于 08-16 16:12 435次阅读

    C语言条件编译的妙用

    线。我对学习总结出一句话“压力不是有人努力,而是比你牛X N倍的人依然在努力” C语言条件编译的应用 一般情况下,源程序中所有的行都要参加编译
    发表于 07-19 01:53

    如何在C语言满足多个条件下进行条件编译

    请教一下各位。在C语言中如果满足多个宏定义条件怎么来进行条件编译呢?今天在写I2
    发表于 11-08 04:35

    【每日一知识点】C语言中const详解

    的内存地址,所以,const定义的只读变量在程序运行过程中只有一份备份,它是全局的只读变量,是存放在静态区的。2、 修饰数组C语言中const还可以修饰数组,举例如下:const int array
    发表于 03-29 10:53

    C语言的精髓——指针详解

    C语言的精髓——指针详解
    发表于 11-30 14:43 17次下载

    C语言程序设计教程之编译预处理的详细资料说明

    本文档的主要内容详细介绍的是C语言程序设计教程之编译预处理的详细资料说明主要内容包括了:1.宏定义 2.文件包含 3.条件
    发表于 01-08 14:19 2次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>程序设计教程之<b class='flag-5'>编译</b>预处理的详细资料说明

    C语言中#和##符号有什么样的作用

    #endif定义的无用代码过滤掉; 将代码中没用的注释部分删除等。 从而生成一个没有宏定义、没有条件编译指令、没有特殊符号的输
    的头像 发表于 02-24 10:56 4.6w次阅读

    c语言条件编译技巧与示例分析

    C语言条件编译#if, #elif, #else, #endif、#ifdef, #ifndef 有些程序在调试、兼容性、平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同
    的头像 发表于 08-26 15:06 2711次阅读

    C语言条件编译语句and单片机DMA的介绍

    C语言条件编译语句and单片机DMA的介绍C语言条件
    发表于 11-29 10:36 3次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>条件</b><b class='flag-5'>编译</b>语句and单片机DMA的介绍

    C语言关于变量定义未使用编译警告warring

    C语言关于变量定义未使用编译警告warring1.警告warring的产生1.1具体警告warring1.2解决方案1.2.1利用attribute 机制1.2.2利用void关键字2
    发表于 11-29 18:21 4次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>关于变量<b class='flag-5'>定义</b>未使用<b class='flag-5'>编译</b>警告warring

    C语言条件编译详解

    —般情况下,C语言源程序中的每一行代码.都要参加编译。但有时候出于对程序代码优化的考虑,希望只对其中一部分内容进行编译。此时就需要在程序中加上条件
    的头像 发表于 04-14 13:12 3015次阅读

    关于C语言知识分享

    C语言是高级语言,由很多适合人阅读的英文字母和符号组成。而CPU只认得O和1组成的指令(称为“机器码”)。所以,我们必须要把C
    发表于 08-26 17:20 2次下载

    c语言定义可以嵌套吗?

    c语言定义可以嵌套吗? C语言定义可以嵌套,也就是一个宏
    的头像 发表于 09-04 17:38 3057次阅读