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

企业网站开发主要职责慈溪网页设计

企业网站开发主要职责,慈溪网页设计,随州网站建设学习,上海小程序开发西安目录 一、整数溢出 溢出 如何防止溢出 二、为函数main提供返回值 连接 一、什么是连接器 连接器工作原理 三、声明与定义 四、命名冲突与static 修饰符 statia 一、整数溢出 溢出 C语言中存在两类整数算术运算,有符号运算与无符号运算。 在无…

目录

一、整数溢出

溢出

如何防止溢出

二、为函数main提供返回值           

连接

一、什么是连接器

连接器工作原理

三、声明与定义

四、命名冲突与static 修饰符

statia


一、整数溢出

溢出

C语言中存在两类整数算术运算,有符号运算与无符号运算。

在无符号算术运算中,没有所谓的“溢出”一说。所有的无符号运算都是以2的n次方为模,这里n是结果中的位数。

当两个操作数都是有符号整数时,“溢出”就有可能发生,而且“溢出”的结果是术定义的。

例如,假定a和b是两个非负整型变量,我们需要检查atb是否会“溢出”种想当然的方式是这样:

if (a + b < 0)
      complain();

这并不能正常运行。当a+b确实发生“溢出”时,所有关于结果如何的假设都不再可靠。

如何防止溢出

1.一种正确的方式是将a和b都强制转换为无符号整数:

if ((unsigned) a + (unsigned) b > INT _MAX)
complain()

此处的INT_MAX是一个已定义常量,代表可能的最大整数值。

2.不需要用到无符号算术运算的另一种可行方法是:
if (a > INT_ MAX - b)
complain();

二、为函数main提供返回值           

最简单的C程序也许是像下面这样:
main()
(
}

这个程序包含一个不易察觉的错误。函数main与其他任何函数一样,如果并未显式声明返回类型,那么函数返回类型就默认为是整型。但是这个程序中并没有给出任何返回值。
通常说来,这不会造成什么危害。         

然而,在某些情形下函数main的返回值却并非无关紧要。大多数C语言实现都通过函数main的返回值来告知操作系统该函数的执行是成功还是失败。

严格说来,我们前面的最简单的C程序应该像下面这样编写代码:
main()
{

return ;
}


或者写成:
main()
{
exit(0);
}

最为经典的“hello world ”程序看上去应该像这样:
# include < stdio.h>
main()
printf( " hello worla\n");
return 0;

}

连接

一个C程序可能是由多个分别编译的部分组成,这些不同部分通过一个通常叫做连接器(也叫连接编辑器,或载入器)的程序合并成一个整体。

在本章中,我们将考查一个典型的连接器,注意它是如何对C程序进行处理的,从而归纳出一些由于连接器的特点而可能导致的错误。

一、什么是连接器

C语言中的一个重要思想就是分别编译,即若干个源程序可以在不同的时候单独进行编译,然后在恰当的时候整合到一起。

编译器的责任是把C源程序“翻译”成对连接器有意义的形式,这样连接器就能够“读懂”C源程序了。

典型的连接器把由编译器或汇编器生成的若干个目标模块,整合成一个被称为载入模块或可执行文件的实体,该实体能够被操作系统直接执行。

其中,某些目标模块是直接作为输入提供给连接器的;而另外一些目标模块则是根据连接过程的需要,从包括有类似printf 函数的库文件中取得的。


连接器通常把目标模块看成是由一组外部对象组成的。每个外部对象代表着机器内存中的某个部分,并通过一个外部名称来识别。

连接器工作原理

1.连接器的输入是一组目标模块和库文件。

2.连接器的输出是一个载入模块。

3.连接器读入目标模块和库文件,同时生成载入模块。

4.对每个目标模块中的每个外部对象,连接器都要检查载入模块,看是否已有同名的外部对象。

5.如果没有,连接器就将该外部对象添加到载入模块中;如果有,连接器就要开始处理命名冲突。

三、声明与定义

下面的声明语句:
int  a;


如果其位置出现在所有的函数体之外,那么它就被称为外部对象a的定义。因为外部对象a并没有被明确指定任何初始值,所以它的初始值默认为0。

下面的声明语句
int a a7;


在定义a的同时也为a明确指定了初始值。这个语句不仅为a分配内存,而且也说明了在该内存中应该存储的值。
下面的声明语句
extern int a;


并不是对a的定义。这个语句仍然说明了a是一个外部整型变量,但是因为它包括了extern 关键字,这就显式地说明了a的存储空间是在程序的其他地方分配的。

每个外部对象都必须在程序某个地方进行定义。因此,如果一个程序中包括了语句
extern Int a:


那么,这个程序就必须在别的某个地方包括语句
int a;


这两个语句既可以是在同一个源文件中,也可以位于程序的不同源文件之中。

一个程序对同一个外部变量的定义不止一次,又将如何处理呢?也就是说,假定下面的语句
int a;


出现在两个或者更多的不同源文件中,情况会是怎样呢?如果
int a = 7;


出现在一个源文件中,而语句
int a = 9;


出现在另一个源文件中,将出现什么样的情形呢?这个问题的答案与系统有关,不同的系统可能有不同的处理方式。严格的规则是,每个外部变量只能够定义一次。

如果外部变量的多个定义各指定一个初始值,例如:
int a = 7; 


出现在一个源文件中,而
int a  = 9;


出现在另一个源文件中,大多数系统都会拒绝接受该程序。

要想在所有的C语言实现中避免这个问题,解决办法就是每个外部变量只定义一次。

四、命名冲突与static 修饰符

两个具有相同名称的外部对象实际上代表的是同一个对象,即使本意并非如此,但系统却会如此处理。因此,如果在两个不同的源文件中都包括了定义
int a;


那么,它或者表示程序错误(如果连接器禁止外部变量重复定义的话),或者在两个源文件中共享a的同一个实例(无论两个源文件中的外部变量a是否应该共享)。

即使其中a的一个定义是出现在系统提供的库文件中,也仍然进行同样的处理

statia

static 修饰符是一个能够减少此类命statia名冲突的有用工具。例如,以下声明语句
statia int a;
其含义与下面的语句相同
int  a
只不过,a的作用域限制在一个源文件内,对于其他源文件,a是不可见的。

因此,如果若干个函数需要共享一组外部对象,可以将这些函数放到一个源文件中,把它们需要用到的对象也都在同一个源文件中以static 修饰符声明。


static 修饰符不仅适用于变量,也适用于函数。如果函数f需要调用另一个函数g,而且只有函数f需要调用函数g,我们可以把函数f与函数g都放到同一个源文件中,并且声明函数g为static :

static  int ;
q( int x)

{

         /*g函数体*/

}

void f(){

{

            /*其他内容*/
  b = g(a); 
}
我们可以在多个源文件中定义同名的函数g,只要所有的函数g都被定义为static ,或者仅仅只有其中一个函数g不是static 。因此,为了避免可能出现的命名冲突,如果一个函数仅仅被同一个源文件中的其他函数调用,我们就应该声明该函数为static 。

http://www.15wanjia.com/news/185545.html

相关文章:

  • 网站建设费用预算模板国外文本排版设计网站
  • 手机网站建设电话咨询昆明网页建站平台
  • 网站优化制作股票网站排名哪个好
  • 平面设计培训网站大全ipad wordpress
  • 稳定的网站建设网监备案网站
  • wordpress怎么做网站12360官方网站下载
  • 网站内部优化安徽网站建设cnfg
  • 黄冈网站建设设计中山网站建设是什么意思
  • 怎么做企业网站推广需要多少钱长沙官网seo技巧
  • 门户网站建设管理情况自查报告网站建设用啥技术
  • 北京网站设计多少钱福州做网站软件
  • wordpress网站嵌入音乐网站推广软件价格
  • 网络营销怎么做网站wordpress图片模糊加载
  • 小微宝安网站建设网站建设和数据容量整合
  • 网站的视频怎么下载郑州网站建设公司如何
  • 一般做网站要什么编程建筑工程公司官网
  • .net开发微信网站流程北京网站建设培训学校
  • 郑州正规公司网站建设服务公司注册地址可以跨市迁移吗
  • 家电网站设计网站后台数据分析怎么做
  • 制作网站大概多少钱怎么做电影网站的
  • 网站开发的费用是怎么计算的阿里云oss可以做网站
  • 网站建设管理中se是什么意思设计网站如何打造收费
  • 整站优化关键词排名百度科技有限公司
  • 网站建设黑客篡改手机网站页面设计
  • 佛山网站优化软件工业设计产品设计公司排名
  • 自助建设分销商城网站目前玩的人最多网游排行榜
  • 网站百度屏蔽关键词网站开发阶段流程图
  • 搜不到wordpress 网站wordpress写代码
  • 绍兴做网站建设用ssh做网站
  • 钓鱼网站盗号wordpress加邮箱代码