| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 程序环境和预处理(C语言系列22) -> 正文阅读 |
|
[C++知识库]程序环境和预处理(C语言系列22) |
目录 前言:1.程序的翻译环境和执行环境在ANSIC的任何一种实现中,存在两个不同的环境:
示意图如下所示: 2.详解编译+链接2.1翻译环境
2.2编译本身也分为几个阶段2.2.1预编译(预处理)在预编译阶段主要做以下的事情:
2.2.2编译汇编阶段是将C语言代码转换成了汇编代码。 主要有以下的步骤:
2.2.3汇编汇编阶段主要是将汇编指令转换成二进制指令。 2.2.4链接主要有以下的步骤:
2.3运行环境程序执行过程:
3.预处理详解3.1预定义符号
这些预定义符号都是语言内置的。? 代码展示:
3.2#define3.2.1#define定义标识符语法:#define?name?stuff 在#define定义标识符的时候建议不要加上分号(;)这样容易导致问题。 3.2.2#define定义宏#define机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏或定义宏(#define? macor)。 宏的声明方式:#define name (parament-list)stuff。 注意:
3.2.3#define替换规则在程序中扩展#define定义符号和宏时,需要涉及几个步骤:
注意:
3.3#和##3.3.1 #号如何把参数插入到字符串中? 代码展示:
? 字符串是有自动连接的特点的。 如:printf(“hello ”“bit\n”); 输出为:hello?bit 3.3.2 ##号作用:
注意:这样的连接必须产生一个合法的标识符。否则其结果就是未定义的。 代码展示:
3.4带副作用的宏参数当宏参数在宏的定义中出现超过一次的时候,如果参数带有副作用,那么你在使用的这个宏的时候,就可能会出现危险,导致不可预测的后果,副作用就是表达式求值的时候出现永久性效果。 例如:
3.5宏和函数的对比宏通常被应用于执行简单的运算,比如在两个数中找到最大值,那么为什么不用函数来解决这个问题呢?
宏的缺点:
3.5.1命名约定
3.6#undef#undef是用于移除一个宏定义的。 如果出现一个名字需要重新被定义,那么它的旧名字首先要被移除掉。 3.7命令行定义许多C的编译器提供了一种能力,允许在命令行中定义符号,用于启动编译过程。 3.8条件编译在编译一个程序的时候,我们如果要将一条语句(一组语句)编译或者放弃是很方便的,因为我们有条件编译指令。 常见的条件编译?指令: #if #endif 2.多个分支的条件编译 #if #elif #else #endif 3.判断是否被定义 #if defined(symbol) #ifed?symbol 或者: #ifndef symbol 4.嵌套定义 #if defined (OS_UNIX) ? ? ? ? #ifdef OPTION ? ? ? ? ? ? ? ? unix_version_option1(); ? ? ? ? #endif ? ? ? ? #ifed OPTION2 ????????????????unix_version_option2(); ? ? ? ? #endif #elif defined(OS_MSDOS) ? ? ? ? #ifed OPTION3 ????????????????unix_version_option3(); ? ? ? ? #endif #endif 4.文件包含我们已经知道#include指令可以使另外一个文件被编译,就像它实际出现与#include指令的地方一样。 这种替换的方式很简单: 这样一个源文件被包含10次,那就实际被编译10次。 4.1头文件包含方式4.1.1本地包含#include“filename”: 查找策略:先在源文件所在目录下查找,如果该头文件未找到,编译器就像查找库函数头文件一样在标准位置查找头文件。 4.1.2库文件包含#include<filename> 采用<>括起来的就是库文件包含。 查找策略: 查找头文件直接区标准路径下去查找,如果找不到就会提示编译错误。 总结: 4.2嵌套文件包含如何避免头文件的重复引入: 每个头文件的开头写: #deifne __TEST_H__ //头文件的内容 #endif? ?//__TEST_H__ 或者#pragma?once 就可以避免头文件的重复引入了。 结束语:这节中小编主要讲解了在C语言程序执行的过程以及程序的环境和预处理指令,希望对大家有所帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)? |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 | -2025/2/25 4:31:08- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |