文档章节

C语言-预处理指令

盘盘的灰灰
 盘盘的灰灰
发布于 2016/08/04 22:50
字数 937
阅读 3
收藏 0
点赞 0
评论 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

C语言 条件编译详解

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

晨曦之光 ⋅ 2012/03/09 ⋅ 0

十七、预处理指令3-文件包含

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

长平狐 ⋅ 2013/03/28 ⋅ 0

C语言程序结构「菜鸟入门篇」

C语言程序结构 C Hello World 实例 C 程序主要包括以下部分: 预处理器指令 函数 变量 语句 & 表达式 注释 让我们看一段简单的代码,可以输出单词 "Hello World": 实例 #includeintmain(){...

小辰带你看世界 ⋅ 01/10 ⋅ 0

三、第一个C程序代码分析

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

长平狐 ⋅ 2013/03/28 ⋅ 0

十五、预处理指令1-宏定义

说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 预处理指令简介 1....

长平狐 ⋅ 2013/03/28 ⋅ 0

“Hello,World”背后的故事

学习一门语言,经常都是从打印“Hello,World”开始的,打过招呼后,你便可以进入程序的新世界。 就拿经典的C语言举例,基本上每个程序员在上学时就可以闭着眼睛写下“Hello,World”,这也是...

⋅ 2017/12/28 ⋅ 0

C语言编译预处理技术一本道来

编译&&预处理.png 一个.C程序,从人懂到计算机懂的流程 编译流程.png 分别简述 预编译(不会去报错,没有真正的到达编译环境) 处理所有的注释,以空格代替 将所有的#define删除,并且展开所...

PcDack ⋅ 2017/12/04 ⋅ 0

C语言的编译链接过程详解

学过C语言的人都应该知道,我们所编辑的C语言程序是不能直接放到机器上运行的,它只不过是一个带".c"后缀的文件(也称为源代码)而已,需要经过一定的处理才能转换成机器上可运行的可执行文件...

LIU-X1001 ⋅ 2016/06/30 ⋅ 0

Objective-C中的预处理器指令与宏

引 什么是预处理器,跟我有什么关系? 预处理器是在OC源文件编译过程中的一个部分,而且是第一个处理部分,预处理器的预也由此可见。 整个编译过程可以大致分为:预处理器进行词法分析 -> 语...

cloudox_ ⋅ 2017/04/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部