文档章节

C语言-预处理指令

盘盘的灰灰
 盘盘的灰灰
发布于 2016/08/04 22:50
字数 937
阅读 3
收藏 0
  • 预处理指令的特点

1). 都是以#开头.

2). 预处理指令都是在编译之前执行.

3). 预处理指令后面都没有分号.

  •  宏定义.

1). 它是1个预处理指令.所以它在编译之前执行.

2). 作用: 可以为1段C代码定义1个标识.如果你要使用这d段C代码.那么你就使用这个标识就可以了.

3). 语法:

        #define 宏名 宏值

        #define N 10

  • 无论宏值是什么东西,在定义宏的时候,不会去检查语法

    只有当完成了宏替换的时候,才会去检查替换以后,是否符合语法规范.

  • 无法通过赋值符号为宏 改值. 因为宏根本就不是变量.
  • 条件编译指令.

    1). 它是1个预处理指令. 所以在预编译阶段执行.

    2). 作用:

            默认的情况下,我们所有的C代码都会被编译为二进制代码.

            条件编译指令的作用: 可以让编译器只编译指定部分的代码.

  •  条件编译指令和if语句的1个对比

    1).条件编译指令是1个预处理指令.在预处理阶段执行.

           if语句是C代码. 在程序运行的时候执行.

    2). if语句无论如何全部都要被编译为二进制指令.

            条件编译指令: 只会讲符合条件的C代码编译为二进制指令.

    3). 实际上.if语句一定程度上可以换成条件编译指令.

            但是.条件编译指令的条件不能是变量参与.只能是宏.

  • 修饰局部变量

    1). 被static修饰的变量 我们叫做静态变量.

        静态变量是声明在常量区中的.

        当我们执行函数的时候.不会再去执行声明静态变量的那句话.直接就略过.

        并且函数执行完毕之后,静态变量也不会被回收. 直到程序结束的时候才会被回收.

        无论函数执行多少次.静态变量只会有1个.

    2). 与全局变量的区别.

        全局变量可以在所有的函数里面访问.而静态变量只能在定义静态变量的函数中访问.

    3). 什么时候需要将变量定义为静态的呢?

        a. 特点和作用.

           无论函数执行多少次.这个静态变量都只有1份. N次函数共享.

        b. 当你有1个数据.你希望无论函数执行多少次 这个数据只有1份.

        实际上,如果要实现这个效果,也可以直接将这个数据定义成全局变量.

        但是全局变量是被所有的函数共享. 所有的函数都能访问

        而静态变量的特点. 只能在当前函数中访问 并且多次执行只有1个.

   4). extern不能修饰局部变量.

  • 全局变量分为两种.

        a. 内部全局变量.

           使用static修饰的全局变量.叫做内部全局变量.

           这个全局变量就只能在当前模块中访问.

           如果是跨模块访问就无法正确访问.

        b. 外部全局变量.

            使用extern修饰的全局变量.我们叫做外部全局变量.

            这个全局变量就可以在外部的模块中访问.

  • static和extern修饰函数

        1). 被static修饰的函数,只能在这个模块的内部调用,无法跨模块调用.

        2). 被extern修饰的函数,可以跨模块调用.

        3). 函数如果没有写static或者extern那么默认就是extern 外部的.

     

© 著作权归作者所有

共有 人打赏支持
盘盘的灰灰
粉丝 0
博文 31
码字总数 24142
作品 0
深圳
c语言编译预处理和条件编译执行过程的理解

  在C语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令。预处理命令属于C语言编译器,而不是C语言的组成部分。通过预处理命令可扩展C语言程序设计的环境。 一.预处理...

文艺小青年
2017/10/12
0
0
define看起来很炫酷!C语言基础教程之预处理和宏定义

C语言预处理器 C语言预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C语言预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处...

诸葛青云999
08/19
0
0
C语言基础教程之预定义和宏处理

define看起来很炫酷!C语言基础教程之预处理和宏定义 C语言预处理器 C语言预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C语言预处理器只不过是一个文本替换工具...

这个人很懒什么都没留下
08/18
0
0
C语言 条件编译详解

预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。 在C 语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含...

晨曦之光
2012/03/09
178
0
三、第一个C程序代码分析

说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 在上一篇中我们已经...

长平狐
2013/03/28
345
0

没有更多内容

加载失败,请刷新页面

加载更多

arts-week10

Algorithm 905. Sort Array By Parity - LeetCode Review Who’s Afraid of the Big Bad Preloader? 一文读懂前端缓存 一个网络请求3个步骤:请求,处理,响应,而前端缓存主要在请求处响应这两步...

yysue
今天
4
0
00.编译OpenJDK-8u40的整个过程

前言 历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理...

凌晨一点
今天
5
0
python: 一些关于元组的碎碎念

初始化元组的时候,尤其是元组里面只有一个元素的时候,会出现一些很蛋疼的情况: def checkContentAndType(obj): print(obj) print(type(obj))if __name__=="__main__": tu...

Oh_really
昨天
6
2
jvm crash分析工具

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。 Cras...

xpbob
昨天
158
0
Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部