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

常州做网站建设的公司天津网约车

常州做网站建设的公司,天津网约车,坡头手机网站建设,网站建设小江网页设计程序的编译环境和执行环境 翻译环境:在这个环境中源代码被转换成可执行的机器指令 执行环境:用于实际执行代码 详解编译链接 翻译环境 注意: 1.组成一个程序的每个源文件通过编译过程分别转换成目标代码。 2.每个目标文件由链接器捆绑在一…

程序的编译环境和执行环境
翻译环境:在这个环境中源代码被转换成可执行的机器指令
执行环境:用于实际执行代码

详解编译+链接

翻译环境
在这里插入图片描述
注意:
1.组成一个程序的每个源文件通过编译过程分别转换成目标代码。
2.每个目标文件由链接器捆绑在一起,形成一个单一而完整的可执行程序。
3.链接器同时也会引入标准c函数中任何被该程序用到的函数,而且它可以搜索程序员的个人数据库,将其需要的函数也链接到程序中。
在这里插入图片描述
运行环境
程序执行的过程:
1.程序必须载入内存中。在有操作系统的环境中,一般这个由操作系统完成。在独立的环境中,程序的载入必须手动安排,也可能通过可执行代码置入只读内存来完成。
2.程序的执行开始,接着调用main函数。
3.开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack)存储函数的局部变量和返回地址,程序同时也可以使用静态(static)内存,存储与静态内存的变量在程序的整个执行过程一直保留他们的值。
4.终止程序。正常或意外终止main函数。

预处理详解

预定义符号

__FILE__ //进行编译的源文件  前后各两条下划线!
__LINE__//文件当前的行号
__DATE__  //文件被编译的日期
__TIME__ //文件被编译的时间
__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义。

这些预定义符号都是语言内置的,例:

#include <stdio.h>
int main()
{printf("file:%s line:%d\n", __FILE__, __LINE__);return 0;
}

#define定义标识符

#define MAX 1000  
#define reg register  //为 register这个关键字,创建一个简短的名字
#define do_forever for(;;)    //用更形象的符号来替换一种实现
#define CASE break;case     //在写case语句的时候自动把 break写上。     
#define DEBUG_PRINT printf("file:%s\tline:%d\t \date:%s\ttime:%s\n" ,\__FILE__,__LINE__ ,       \__DATE__,__TIME__ ) // 如果定义的 stuff过长,可以分成几行写,除了最后一行外,每行的后面都加一个反斜杠(续行符)。

define后面不加分号!!!
#define定义宏
#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)。

#define name( parament-list ) //stuff 其中的
parament-list 是一个由逗号隔开的符号表,它们可能出现在stuff中。

#define 替换规则
在程序中扩展#define定义符号和宏时,需要涉及几个步骤。

  1. 在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号。如果是,它们首先被替换。
  2. 替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他们的值替换。
  3. 最后,再次对结果文件进行扫描,看看它是否包含任何由#define定义的符号。如果是,就重复上述处理过程。
    注意
  4. 宏参数和#define 定义中可以出现其他#define定义的变量。但是对于宏,不能出现递归。
  5. 当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索。
    #和##
char* p = "hello ""world\n";
printf("%s",p);//输出的是 hello world

字符串是有自动连接的特点的。
##可以把位于它两边的符号合成一个符号,它允许宏定义从分离的文本片段创建标识符。
注: 这样的连接必须产生一个合法的标识符。否则其结果就是未定义的。
带副作用的宏参数
在这里插入图片描述
在这里插入图片描述

宏与函数对比
宏常被应用于执行简单的运算,比如在两个数中找出较大的一个。

#define MAX(a,b),((a)>(b)?(a):(b))

为什么不用函数来完成?原因有二:
1.用于调用函数和从函数中返回的代码可能比实际执行这个小型计算工作所需要的时间更多。所以宏比函数在程序的规模和速度方面更胜一筹。
2.更重要的是函数的形参必须声明为特定的类型。所以函数只能在类型合适的表达式上使用。反之,宏可以适用于整型,长整型,浮点型等可以用于>来比较的类型。宏和类型无关
宏相比函数的劣势:
1,每次使用宏的时候,一份宏定义的代码将插入程序中,除非宏比较短,否则可能大幅增加程序的长度。
2.宏是没法调试的。
3.宏由于类型无关,也就不够严谨。
4.宏可能会带来运算符优先级的问题,导致程序容易出错。
宏有时候可以做函数做不到的事情。比如:宏的参数可以出现类型,但是函数做不到。
在这里插入图片描述
在这里插入图片描述

#undef
这条指令用于移除一个宏定义

#undef NAME
//如果现存的一个名字需要被重新定义,那么它的旧名字首先要被移除。

在这里插入图片描述
条件编译
在编译一个程序的时候我们如果要将一条语句(一组语句)编译或者放弃是很方便的。因为我们有条件编译指令。
比如:调试性的代码,删除可惜,保留又碍事,所以我们可以选择性的编译。

#include <stdio.h>
#define __DEBUG__
int main()
{
int i=0;
int arr[10] = {0}; 
for(i=0; i<10; i++) 
{ 
arr[i] = i; 
#ifdef __DEBUG__ 
printf("%d\n", arr[i]);//为了观察数组是否赋值成功。   
#endif //__DEBUG__ 
} 
return 0;
}

常见的条件编译指令:

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.嵌套指令 
#if  defined(OS_UNIX) #ifdef OPTION1 unix_version_option1(); #endif #ifdef OPTION2 unix_version_option2(); #endif 
#elif defined(OS_MSDOS) #ifdef OPTION2 msdos_version_option2(); #endif 
#endif 

解决头文件重复包含
在这里插入图片描述

http://www.dtcms.com/wzjs/549494.html

相关文章:

  • 重庆微信开发网站建设十大互联网公司排名
  • 绿色蔬菜网站模板深圳展厅装修公司企业展厅设计公司
  • 淘宝网站建设维护会计科目达人室内设计网官方
  • 商务型网站网站内容页模板
  • 制作英文网站费用开发小程序需要多久
  • 单位网站建设情况汇报wordpress换空间搬家
  • 南通做网站企业动漫网站网页设计
  • 赣州网站制作找哪家好eclipse网站开发流程
  • 华为模板建站淘宝网站所用编码
  • 外贸网站优化建设南昌网站忧化
  • 网页设计网站长沙dede怎么换网站页面
  • 专业的医疗网站建设wordpress如何设置首页
  • 域名和网站空间相互做解析做网站凡科
  • 深圳建设工程交易服务中心网站郑州近期重大新闻
  • 简历网站推荐网站布局图
  • 广东省建筑网站网站方案报价
  • 四川省建设厅的注册中心网站首页网站建设推广平台有哪些方面
  • 前端网站做多语言做网站一般做几个尺寸
  • 水墨风格网站php网站建设安装环境
  • 工商企业信息查询网站免费行情软件app网站大全
  • 如何自己做留言板网站制作作业平台网站的设计
  • 九龙坡网站建设石家庄自助建站软件
  • 巩义企业网站建设商城型网站的概念
  • 住房城乡建设部举报网站中文wordpress网站模板
  • 湛蓝 网站开发网络营销师怎么报名
  • 什么是响应网站设计成都今晚全部解封
  • 自己做卖东西网站wordpress文章合并
  • jsp网站开发步骤商城平台
  • 织梦模板可以在wordpress用南昌seo教程
  • 天猫网站建设的意义如何搭建手机网站源码