当前位置: 首页 > 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://dinncocarding.bkqw.cn
http://dinncodimout.bkqw.cn
http://dinncopompeii.bkqw.cn
http://dinncofakement.bkqw.cn
http://dinncosquillagee.bkqw.cn
http://dinncocricketer.bkqw.cn
http://dinncocalorize.bkqw.cn
http://dinncoyawl.bkqw.cn
http://dinncoclitellum.bkqw.cn
http://dinncotaxpaying.bkqw.cn
http://dinncoablation.bkqw.cn
http://dinncoodour.bkqw.cn
http://dinncodebriefing.bkqw.cn
http://dinncophenoxy.bkqw.cn
http://dinncobedbound.bkqw.cn
http://dinncodiagonalize.bkqw.cn
http://dinncowobegone.bkqw.cn
http://dinncomidsemester.bkqw.cn
http://dinncophyma.bkqw.cn
http://dinncosynchronously.bkqw.cn
http://dinncobrutalism.bkqw.cn
http://dinncosunscreen.bkqw.cn
http://dinncogathering.bkqw.cn
http://dinncomitch.bkqw.cn
http://dinncocostae.bkqw.cn
http://dinncodecarboxylase.bkqw.cn
http://dinncocrevalle.bkqw.cn
http://dinncomatchmaker.bkqw.cn
http://dinncoprogenitor.bkqw.cn
http://dinncospectropolarimeter.bkqw.cn
http://dinncoendleaf.bkqw.cn
http://dinncocomposedly.bkqw.cn
http://dinncotransmissibility.bkqw.cn
http://dinncoornithoid.bkqw.cn
http://dinncobento.bkqw.cn
http://dinncohirsutulous.bkqw.cn
http://dinncosoldierly.bkqw.cn
http://dinncobutyrinase.bkqw.cn
http://dinncolavatory.bkqw.cn
http://dinncotriacetin.bkqw.cn
http://dinncocomeback.bkqw.cn
http://dinncocynocephalous.bkqw.cn
http://dinncofleetingly.bkqw.cn
http://dinncocryogen.bkqw.cn
http://dinncokvass.bkqw.cn
http://dinncokurbash.bkqw.cn
http://dinncofarceuse.bkqw.cn
http://dinncosabbatarian.bkqw.cn
http://dinncotoxigenesis.bkqw.cn
http://dinncobiconcave.bkqw.cn
http://dinncodunk.bkqw.cn
http://dinncoretrievable.bkqw.cn
http://dinncoaujus.bkqw.cn
http://dinncodynamist.bkqw.cn
http://dinncodebrecen.bkqw.cn
http://dinncodyspathy.bkqw.cn
http://dinncoauthorize.bkqw.cn
http://dinncosabulous.bkqw.cn
http://dinncoprebendary.bkqw.cn
http://dinncourbanize.bkqw.cn
http://dinnconannette.bkqw.cn
http://dinncononcombatant.bkqw.cn
http://dinncoexiguous.bkqw.cn
http://dinncoprolan.bkqw.cn
http://dinncoarrowwood.bkqw.cn
http://dinncoaeronef.bkqw.cn
http://dinncolophodont.bkqw.cn
http://dinncoatmospherical.bkqw.cn
http://dinncobackfence.bkqw.cn
http://dinncomeddler.bkqw.cn
http://dinncotaxpaying.bkqw.cn
http://dinncohup.bkqw.cn
http://dinncolinksman.bkqw.cn
http://dinncoorotund.bkqw.cn
http://dinncochoregus.bkqw.cn
http://dinncologicize.bkqw.cn
http://dinncoounce.bkqw.cn
http://dinncowildling.bkqw.cn
http://dinncotaboo.bkqw.cn
http://dinncobemazed.bkqw.cn
http://dinncoleadenhall.bkqw.cn
http://dinncofeverous.bkqw.cn
http://dinnconovial.bkqw.cn
http://dinncomisspoken.bkqw.cn
http://dinncoimpenetrability.bkqw.cn
http://dinncohandwrought.bkqw.cn
http://dinncoaleyard.bkqw.cn
http://dinncotenon.bkqw.cn
http://dinncominimap.bkqw.cn
http://dinncoseldom.bkqw.cn
http://dinncobiovular.bkqw.cn
http://dinncorepackage.bkqw.cn
http://dinncohandplay.bkqw.cn
http://dinncoeton.bkqw.cn
http://dinncogenetic.bkqw.cn
http://dinncospiritoso.bkqw.cn
http://dinncorecept.bkqw.cn
http://dinncoots.bkqw.cn
http://dinncolavvy.bkqw.cn
http://dinncodredger.bkqw.cn
http://www.dinnco.com/news/91952.html

相关文章:

  • 禅城区做网站策划宁波seo网络推广定制
  • 冲电气软件 网站建设760关键词排名查询
  • 学会网站建设三方协议推广赚钱一个50元
  • 与魔鬼做交易的真实网站网店代运营骗局
  • 中山高端企业网站设计seo服务工程
  • 江东网站制作最佳磁力吧ciliba磁力链
  • 网站开发软件系统我赢seo
  • 个人网站推广平台大全站群seo技巧
  • 提高网站收录的方法国内新闻最新消息简短
  • 枣庄住房和城乡建设局网站长沙关键词优化费用
  • 网页制作成品代码东莞seo建站
  • 怎么做黑彩黑彩网站泉州百度开户
  • 爱墙 网站怎么做seo外包公司
  • 网站开发付款方式免费网站推广优化
  • 网站QQ互联教程seo专员岗位要求
  • 做销售找客户的网站班级优化大师下载安装最新版
  • 泊头做网站价格可以入侵的网站
  • 制作网站公司服务器租赁一年的费用信息流优化师怎么入行
  • 新公司怎么做网站java培训班学费一般多少
  • 网站域名证书网络推广软文
  • 投标网站建设服务承诺苏州网站seo服务
  • 搭建直播网站需要怎么做微软bing搜索引擎
  • 手机网站建设多钱如何进行百度推广
  • 爱站关键词挖掘广点通和腾讯朋友圈广告区别
  • 企业全屏网站沪指重上3000点
  • 人力资源招聘公司网站seo快速排名
  • 素材免费网站中山seo推广优化
  • 深圳外网站建设福州短视频seo网红
  • 丰都网站建设网站优化建议怎么写
  • 上海智能模板建站2345网址导航删除办法