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

中国宣布入境最新消息2023汕头网站快速排名优化

中国宣布入境最新消息2023,汕头网站快速排名优化,昆明网站建设哪家比较,网站建设佰首选金手指二程序的编译与链接写在前面程序的编译与链接编译的过程程序编译环境程序执行过程编译链接的过程预处理预处理符号#define条件编译写在前面 程序的编译与链接是C语言中非常重要的一节。关键点在于详解C语言的程序编译和链接、宏的定义和与函数的区别、条件编译等知识。 程序的编… 程序的编译与链接写在前面程序的编译与链接编译的过程程序编译环境程序执行过程编译链接的过程预处理预处理符号#define条件编译写在前面 程序的编译与链接是C语言中非常重要的一节。关键点在于详解C语言的程序编译和链接、宏的定义和与函数的区别、条件编译等知识。 程序的编译与链接 编译的过程 程序编译环境 在ANSI C的任何一种实现中存在两个不同的环境。 翻译环境在这个环境中源代码被转换为可执行的机器指令。执行环境用于实际执行代码。 程序执行过程 程序执行的过程 程序首先要载入内存再有操作系统的环境中一般有操作系统完成。在独立的环境中程序载入内存由人工安排也可能是通过可执行代码置入只读内存中来完成。程序的执行开始后调用main函数。开始执行程序代码程序会使用一个运行时堆栈存储函数的局部变量和返回地址。程序同时也可以使用静态内存存储在静态内存中的变量在程序的整个执行过程中一直保存他们的值。运行完代码终止程序。可能是正常终止也可能是意外终止。 组成一个程序的每个源文件通过编译过程分别转换成目标代码。每个目标文件由链接器捆绑在一起形成完整单一的可执行程序。链接器会引入标准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的替换规则 在调用宏时首先对参数进行检查看看是否包含任何由#define定义的符号。如果是首先被替换。替换文本随后被插入到程序中原来文本的位置。对于宏参数名被他们的值替换。最后在此对结果文件进行扫描看看是否包含任何由#define定义的符号。如果是重复上面操作。 注意事项 宏参数和#define定义中可以出现其他#define 定义的符号但是对于宏不能进行递归。 当预处理器搜索#define 定义的符号时字符串常量的内容并不会被搜索。 使用技巧 妙用宏定义函数 #define PRINT(FORMAT, VALUE)\printf(the value is FORMAT\n, VALUE);int main(){...PRINT(%d, 10);}说明只有当字符串作为宏参数的时候才可以把字符串放在字符串中。 使用# 把宏参数变成对应的字符串。 int i 10; #define PRINT(FORMAT, VALUE)\printf(the value of #VALUE is FORMAT \n, VALUE);...PRINT(%d, i3);代码中的#VALUE在预处理阶段会被处理为“VALUE”。最终的输出结果时 the value of i3 is 13使用##把位于##两边的符号合成一个新的符号。 它允许宏定义从分离的文本片段创建标识符。 #define ADD_TO_SUM(num, value)\sum##num value;...ADD_TO_SUM(5,10);注意这样的链接必须产生一个合法的标识符否则结果是未定义的。 有的宏参数是带副作用的可能会对自己或者其他的值产生影响。如果这个宏参数在宏的定义中出现超过一次就会产生危险。副作用的意思是表达是在求值时出现了永久性效果。举个例子 x 1; x ;其中x 1 无副作用因为并未改变x的值但是x改变了x的值所以如果在宏定义中出现多次就会影响x的正确取值不注意会出现错误。 宏和函数的对比 宏通常被应用在执行简单的运算。比如两个数中找较大。不用函数的原因是 宏比函数在程序的规模和速度方面更胜一筹。宏是无关类型的。而函数声明则必须声明为特定的类型只针对C语言。 宏的缺点 每次使用宏一份宏定义的代码会被插入到程序中去所以宏一般只能定义短的代码否则会大幅度增加程序的长度。宏无法调试。无法递归。宏正因为类型无关所以不够严谨。宏可能会带来运算符优先级的问题从而导致程序错误。 命名约定宏名全部大写而函数名不要全部大写。 移除宏定义 #undef NAME条件编译 使用条件编译在编译一个程序的时候将一条语句编译或者放弃编译是很方便的。 比如调试性的代码可以选择性的编译。 #define __DEBUG__ int main() {int i 0;...#ifdef __DEBUG__...#endif __DEBUG__... }常见的条件编译 #if 常量表达式... #endif //常量表达式由预处理器求值。 如 #define __DEBUG__ 1 #if __DEBUG__ ... #endif//多分支条件编译 #if 常量表达式 .. #elif#else#endif判断是否被定义 #if defined(symbol) #ifdef symbol#if !defined(symbol) #ifndef symbol嵌套指令
http://www.yingshimen.cn/news/115156/

相关文章:

  • 建设公司网站内容做的网站速度慢
  • 网站开发时间段七牛图片怎么上传wordpress博客
  • 婚庆公司网站wordpress文章样式
  • WordPress网站404公益页面山东住房城乡建设厅官方网站
  • layui做网站在上海做兼职在哪个网站好
  • 关闭网站需要多久成都营销型网站制作
  • 网站开发商品管理表字段企业网站设计的基本原则有哪些
  • 宜昌网站改版wordpress随机播放器
  • 网站开发公司加盟如何快速做h5网站
  • 名气特别高的手表网站深圳市建
  • 网站建设开发方式包括哪些威海网页设计制作公司
  • 企业个人网站湛江仿站定制模板建站
  • 软件网站建设基本流程福州网站建设
  • 渗透网站后台数据截图广州的服装网站建设
  • 两学一做网站网站婚纱网站建设步骤和方法
  • 一个人做网站的难度wordpress需要的插件
  • 网站推广怎么样如何拥有一个自己的网站
  • 中联汇科 网站建设装饰公司设计用什么软件
  • 电脑网站开发者模式wordpress ajax 加载文章内容
  • 站长域名查询工具龙湖地产 网站建设
  • 网站制作加教程视频教程咖啡网络营销策划书
  • 做订票网站设计要多久企业名称登记管理实施办法
  • 海南网站建设介绍wordpress首页显示文章图片
  • 做盗版网站吗专业网站托管的公司
  • 手机网站 手机app网站建设未来发展的趋势
  • 温岭市住房和城乡建设局网站wordpress首页内容放哪里
  • 无锡企业网站建设费用太原本地网站
  • 济南网络公司排行青岛百度推广优化
  • 做网站长沙灰色行业关键词推广
  • 怎样做化妆品公司网站中山网站建设电话