C语言程序如何从代码变成可执行程序?(预处理总结)
来源:互联网 发布:时间序列的聚类算法 编辑:程序博客网 时间:2024/05/16 15:17
想要知道这个问题,首先要了解:
编程语言包括,机器语言,汇编语言,高级语言。
计算机使用的是0,1这样的二进制,二进制是计算机的基础,用这些0,1组合来命令计算机去工作。学校里那些老教授讲起他们求学的时候,总喜欢说我们那时候编程序用的是打孔的方式,也就是写出一串串0,1的组合来编程序。为了缓解编程的痛苦,一个新的语言出现了——汇编语言。用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用“A D D”代表加法,“M O V”代表数据传递等等,但是计算机并不认识这些,所以就需要一个翻译程序来完成这项工作,这种翻译程序就叫做汇编程序。 但是汇编程序还是很复杂,高级语言的出现使程序更容易编程,更人性化。
但是一个C语言程序如何从代码变成可执行程序?可以简单概括为:C源程序->编译预处理->编译汇编程序->链接程序->可执行文件
一、预处理
预处理阶段阶段包括头文件展开,宏替换,去注释,条件编译。
头文件展开:头文件一般形式为#include<stdio.h>或者#include “game.h" 。两者的区别为后者一遍在寻找头文件时是在当前工程目录下寻找,前者实在系统库的目录下寻找。但是,头文件是干什么的呢??头文件一遍用#include定义了宏,或者一些函数的声明。使用头文件的目的就是为了多个C语言文件调用某个定义,只需引用头文件就不在需要在定义一遍。预处理阶段的头文件展开就是把头文件那些所需要的定义加入到程序中以供使用。
宏替换:#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏。(常见约定:宏的名字全部大写)
在预处理阶段,编译器把参数替换到文本中,进行运算。
宏不单单可以替换变量常量,也可以替换函数。但是宏和函数还是有些区别;
参数类型:宏与类型无关。例如:比较两个数的大小可以用宏来完成,#define MAX(a,b) ((a)>(b)?(a):(b)) 使用宏的好处是不用考虑啊,a,b的类型,可以是整型,可以浮点型,但是用函数来完成就比较麻烦。
代码长度:每次使用宏都要将代码插到程序中,除非代码很小否则代码程度大大加长,这时使用函数就比较好。
执行速度:使用宏更快,使用函数存在调用/返回函数的额外开销。
参数求职:参数每次使用宏定义时,他们都将重新求值可能产生不可预料的结果。函数不会有影响。
操作符优先级:宏参数求值是在所有周围表达式的上下文环境里,除非加上括号,否则可能产生不可预料的结果。而函数参数只在调用时求值一次并反給函数,表达式的求值结果更容易预测。
去注释:预处理阶段,编译器把那些注释的语句自动删除。
条件编译:可以选择代码的一部分是被忽略还是被执行。
语法:
#if constant-expression (常量表达式)
statements1
#elif constant-expression
statements2
#else
statements3
endif
是否被定义:测试一个符号是否被定义
#if defined(symbol)
#ifdef symbol
#if !defined(symbol)
#ifndef symbol
编译:把C语言代码转化成汇编代码
链接程序:把多个文件链接一起生成可执行程序。
- C语言程序如何从代码变成可执行程序?(预处理总结)
- C语言源程序(.c)如何变成可执行程序(.exe)
- C语言从源程序到可执行程序
- 什么是BSS段和c语言程序如何变成可执行的文件
- C/C++从代码到可执行程序
- 谈谈c语言程序如何变成可执行文件
- C语言-预处理程序
- C语言-预处理程序
- C语言-预处理程序
- C语言-预处理程序
- C语言-预处理程序
- c语言预处理程序
- 【PE】如何将Python程序变成可执行程序?
- C语言可执行程序如何通过运行直接调用
- C语言hello.c如何变成执行程序的
- 教你如何获得可执行程序的执行目录、可执行程序名、可执行程序后缀(C\C++)
- 【转载】C语言-预处理程序
- 代码变成可执行程序期间,编译器做了那些事?
- notepad++进行单行、多行、区块注释和取消注释
- Django学习之方法自动地定期执行
- windbg拦截驱动加载
- js全局变量与局部变量
- VMware鼠标前进 后退键
- C语言程序如何从代码变成可执行程序?(预处理总结)
- 分享Kali Linux 2016.2第42周镜像文件
- WebService到底是什么?
- 《Spring揭秘》第三章 读书笔记 —— 掌控大局的IoC Service Provider
- enum与typedef enum的用法
- linux服务器怎么安装pip
- JavaScript中的call(),apply(),bind()方法 关于this指向
- 开发优化之——调优工具:dump hprof file 查看内存情况,找到内存泄露,androidhprof
- 数组的定义