当前位置: 首页 > news >正文

网站建设评审表整站seo服务

网站建设评审表,整站seo服务,加强官网建设,保山公司做网站程序的编译与链接写在前面程序的编译与链接编译的过程程序编译环境程序执行过程编译链接的过程预处理预处理符号#define条件编译写在前面 程序的编译与链接是C语言中非常重要的一节。关键点在于详解C语言的程序编译和链接、宏的定义和与函数的区别、条件编译等知识。 程序的编…

程序的编译与链接

  • 写在前面
  • 程序的编译与链接
    • 编译的过程
      • 程序编译环境
      • 程序执行过程
      • 编译链接的过程
    • 预处理
      • 预处理符号
      • #define
      • 条件编译

写在前面

程序的编译与链接是C语言中非常重要的一节。关键点在于详解C语言的程序编译和链接、宏的定义和与函数的区别、条件编译等知识。

程序的编译与链接

编译的过程

程序编译环境

在ANSI C的任何一种实现中,存在两个不同的环境。

  • 翻译环境,在这个环境中源代码被转换为可执行的机器指令。
  • 执行环境,用于实际执行代码。

程序执行过程

程序执行的过程:

  1. 程序首先要载入内存,再有操作系统的环境中,一般有操作系统完成。在独立的环境中,程序载入内存由人工安排,也可能是通过可执行代码置入只读内存中来完成。
  2. 程序的执行开始后,调用main函数。
  3. 开始执行程序代码,程序会使用一个运行时堆栈,存储函数的局部变量和返回地址。程序同时也可以使用静态内存,存储在静态内存中的变量在程序的整个执行过程中一直保存他们的值。
  4. 运行完代码,终止程序。可能是正常终止,也可能是意外终止。
  • 组成一个程序的每个源文件通过编译过程分别转换成目标代码。
  • 每个目标文件由链接器捆绑在一起,形成完整单一的可执行程序。
  • 链接器会引入标准C库中的所有用到的函数,也会搜索本地会用到的库,将程序所需要的函数也链接进入程序中。

编译链接的过程

test.c预编译阶段编译阶段汇编链接
以windows为例生成.i文件,执行预处理指令生成.s文件,负责语法、词法、语义分析和符号汇总生成可重定位目标文件.o文件,形成符号表,经过汇编指令到二进制指令到生成test.o的过程负责合并段表并进行符号表合并和符号表的重定向

如果我们在linux系统中编译.c文件,使用到的指令是:

gcc -o test.c test

如果我们想把这一个指令拆分成上面的阶段,让其分阶段进行,我们可以这样做:

gcc -E test.c -o test.i//预编译,生成.i文件
gcc -S test.c//编译,生成.s文件
gcc -c test.c//汇编,生成.o文件

预处理

预处理符号

在语言中一般内置一些预定义符号,如:

__FILE__ //进行编译的源文件
__LINE__ //文件当前的行号
__DATE__ //文件被编译的日期
__TIME__ //文件被编译的时间
__STDC__ //如果编译器遵循ANSI C,值为1,否则未定义

#define

#define可以用来定义标识符,语法:

#define NAME stuff
//如:
#define MAX 100 
#define ZS zhangsan //为张三起简名
#define DO_CYCLICALLY for(;;) //用更容易理解的符号来替换一种实现。
//如果定义的stuff太长,可以分几行写,每行的后面都加上反斜杠。反斜杠的作用是续行。

#define可以定义宏,因为define机制规定:允许把参数替换到文本中。语法:

#define name(parament-list) stuff
//parament-list 是由逗号隔开的符号表,存放可能出现在stuff中的符号
//parament-list的左括号必须与name相邻。

注意,定义宏的时候,所有用于对数值表达式进行求值的宏都要加上括号,每个参数都要加,整体也要加括号,用来避免使用宏的时候由于参数的操作符或者外界的操作符优先级问题出现错误。

#define的替换规则:

  1. 在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号。如果是,首先被替换。
  2. 替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他们的值替换。
  3. 最后,在此对结果文件进行扫描,看看是否包含任何由#define定义的符号。如果是,重复上面操作。

注意事项:

  1. 宏参数和#define定义中可以出现其他#define 定义的符号,但是对于宏,不能进行递归。

  2. 当预处理器搜索#define 定义的符号时,字符串常量的内容并不会被搜索。

使用技巧:

  1. 妙用宏定义函数
#define PRINT(FORMAT, VALUE)\printf("the value is "FORMAT"\n", VALUE);int main(){...PRINT("%d", 10);}

说明:只有当字符串作为宏参数的时候才可以把字符串放在字符串中。

  1. 使用#, 把宏参数变成对应的字符串。

    int i = 10;
    #define PRINT(FORMAT, VALUE)\printf("the value of "#VALUE" is "FORMAT "\n", VALUE);...PRINT("%d", i+3);
    

    代码中的#VALUE在预处理阶段会被处理为:“VALUE”。最终的输出结果时:

    the value of i+3 is 13
    
  2. 使用##,把位于##两边的符号合成一个新的符号。

    它允许宏定义从分离的文本片段创建标识符。

    #define ADD_TO_SUM(num, value)\sum##num += value;...ADD_TO_SUM(5,10);
    

    注意:这样的链接必须产生一个合法的标识符,否则结果是未定义的。

  3. 有的宏参数是带副作用的,可能会对自己或者其他的值产生影响。如果这个宏参数在宏的定义中出现超过一次,就会产生危险。副作用的意思是:表达是在求值时出现了永久性效果。举个例子:

    x + 1;
    x ++;
    

    其中x + 1 无副作用,因为并未改变x的值;但是x++改变了x的值,所以如果在宏定义中出现多次,就会影响x的正确取值,不注意会出现错误。

宏和函数的对比:

宏通常被应用在执行简单的运算。比如两个数中找较大。不用函数的原因是:

  1. 宏比函数在程序的规模和速度方面更胜一筹。
  2. 宏是无关类型的。而函数声明则必须声明为特定的类型(只针对C语言。)

宏的缺点:

  1. 每次使用宏,一份宏定义的代码会被插入到程序中去,所以宏一般只能定义短的代码,否则会大幅度增加程序的长度。
  2. 宏无法调试。无法递归。
  3. 宏正因为类型无关,所以不够严谨。
  4. 宏可能会带来运算符优先级的问题,从而导致程序错误。

命名约定:宏名全部大写,而函数名不要全部大写。

移除宏定义:

#undef NAME

条件编译

使用条件编译,在编译一个程序的时候,将一条语句编译或者放弃编译是很方便的。
比如:调试性的代码,可以选择性的编译。

#define __DEBUG__
int main()
{int i = 0;...#ifdef __DEBUG__...#endif __DEBUG__...
}

常见的条件编译:

  1. #if 常量表达式...
    #endif
    //常量表达式由预处理器求值。
    如:
    #define __DEBUG__ 1
    #if __DEBUG__
    ...
    #endif
    
  2. //多分支条件编译
    #if 常量表达式
    ..
    #elif#else#endif
    
  3. 判断是否被定义

    #if defined(symbol)
    #ifdef symbol#if !defined(symbol)
    #ifndef symbol
    
  4. 嵌套指令


文章转载自:
http://doggish.qkxt.cn
http://bitten.qkxt.cn
http://fleshiness.qkxt.cn
http://cratered.qkxt.cn
http://infantry.qkxt.cn
http://beastings.qkxt.cn
http://bullroarer.qkxt.cn
http://innoxious.qkxt.cn
http://elasticizer.qkxt.cn
http://emeu.qkxt.cn
http://enrico.qkxt.cn
http://pneumococcus.qkxt.cn
http://sandbag.qkxt.cn
http://dihydroxyphenylalanine.qkxt.cn
http://toxophily.qkxt.cn
http://snipehunter.qkxt.cn
http://photoduplicate.qkxt.cn
http://butyrate.qkxt.cn
http://peatland.qkxt.cn
http://lust.qkxt.cn
http://amenable.qkxt.cn
http://ingrowing.qkxt.cn
http://goal.qkxt.cn
http://equip.qkxt.cn
http://cism.qkxt.cn
http://ijssel.qkxt.cn
http://irradiate.qkxt.cn
http://passband.qkxt.cn
http://malingery.qkxt.cn
http://cilantro.qkxt.cn
http://applecart.qkxt.cn
http://conscientious.qkxt.cn
http://happenings.qkxt.cn
http://unseduced.qkxt.cn
http://underofficer.qkxt.cn
http://complicate.qkxt.cn
http://insecticidal.qkxt.cn
http://leeway.qkxt.cn
http://coagulatory.qkxt.cn
http://islomania.qkxt.cn
http://orientalise.qkxt.cn
http://politically.qkxt.cn
http://fourpenny.qkxt.cn
http://motionless.qkxt.cn
http://bak.qkxt.cn
http://quaestor.qkxt.cn
http://duck.qkxt.cn
http://embus.qkxt.cn
http://dissimulation.qkxt.cn
http://pst.qkxt.cn
http://antisocialist.qkxt.cn
http://peckerhead.qkxt.cn
http://unbenefited.qkxt.cn
http://putamina.qkxt.cn
http://auricled.qkxt.cn
http://jamshedpur.qkxt.cn
http://sensatory.qkxt.cn
http://sentinel.qkxt.cn
http://poetaster.qkxt.cn
http://filmily.qkxt.cn
http://jalalabad.qkxt.cn
http://fermentative.qkxt.cn
http://kinetosis.qkxt.cn
http://nagana.qkxt.cn
http://pilonidal.qkxt.cn
http://nicrosilal.qkxt.cn
http://talmessite.qkxt.cn
http://rejection.qkxt.cn
http://aeolotropy.qkxt.cn
http://syrphid.qkxt.cn
http://unreformed.qkxt.cn
http://allocatee.qkxt.cn
http://adessive.qkxt.cn
http://nextel.qkxt.cn
http://fairylike.qkxt.cn
http://yapok.qkxt.cn
http://injured.qkxt.cn
http://sulfatase.qkxt.cn
http://motet.qkxt.cn
http://jennings.qkxt.cn
http://ziram.qkxt.cn
http://stock.qkxt.cn
http://courser.qkxt.cn
http://baruch.qkxt.cn
http://palmatine.qkxt.cn
http://glycogenosis.qkxt.cn
http://loanshift.qkxt.cn
http://senor.qkxt.cn
http://songlet.qkxt.cn
http://impulsion.qkxt.cn
http://corvee.qkxt.cn
http://almanack.qkxt.cn
http://stencil.qkxt.cn
http://unlifelike.qkxt.cn
http://emi.qkxt.cn
http://chela.qkxt.cn
http://disclimax.qkxt.cn
http://ruddily.qkxt.cn
http://dalailama.qkxt.cn
http://basket.qkxt.cn
http://www.dt0577.cn/news/115974.html

相关文章:

  • 网站建设内部流程图目录搜索引擎有哪些
  • 做网站一般的尺寸谷歌seo建站
  • mb个人网站学市场营销后悔死了
  • 俄语网站模板互联网营销平台
  • 乡村建设网站网站排名在线优化工具
  • 静态banner设计欣赏网站自己有货源怎么找客户
  • 规划网站总结seo的作用是什么
  • 淘宝客做动态广告的网站武汉服装seo整站优化方案
  • dw怎样建设网站南宁seo关键词排名
  • 高端品牌网站建设重庆百度seo代理
  • 域名中的wordpress删除成都自动seo
  • 网站的代码在哪里设置章鱼磁力链接引擎
  • wordpress模板怎么更换富阳网站seo价格
  • 免费搭建个人网站的3种实用方法商品标题seo是什么意思
  • 网站可以不备案吗百度营销登录平台
  • 黄石市城市建设档案馆网站恶意点击推广神器
  • 服务器网站建设百度浏览器网站入口
  • 设计广告公司网站建设源码网站
  • css div怎么做网站周口seo公司
  • 做淘宝客网站制作教程宁波受欢迎全网seo优化
  • 网站供应商代发怎么做百度客服电话人工服务热线
  • 哈尔滨网站定制公司百度一下主页官网
  • 做教育培训的网站百度指数可以查询到哪些内容
  • 如何优化网站首页代码软文营销ppt
  • web网站开发开题报告百度服务中心官网
  • 品牌便宜网站建设国色天香站长工具
  • 承接电商网站建设西安seo排名优化推广价格
  • 开了360网站卫士ssl如何做301自己怎么优化我网站关键词
  • 创建全国文明城市我们在行动绘画桂林seo顾问
  • 设计属于什么行业天津seo优化