当前位置: 首页 > 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.hkea.cn/news/878377/

相关文章:

  • 学做网站的网站重庆seo整站优化报价
  • 保定网站设计概述seo推广软件排名
  • 查pv uv的网站网络营销推广服务
  • 怎样让客户做网站优化 保证排名
  • 企业营销型网站做的好网络营销的有哪些特点
  • 网站开发 合同兰州快速seo整站优化招商
  • 网站开发技术现状深圳网络营销推广培训
  • 知名网络公司有哪些河北网站seo
  • 学做网站多少钱关键词难易度分析
  • 传奇如何做网站网站建设策划书案例
  • 龙岗 网站建设深圳信科最好用的搜索神器
  • 动态网站开发日志重庆seo整站优化报价
  • 魔站网站建设微信公众号运营推广方案
  • 好的网站建设公司营销推广外包公司
  • 教育机构做网站素材长尾关键词爱站
  • 做网站选什么系统企业网站seo推广
  • 山东省南水北调建设管理局网站腾讯网qq网站
  • 菏泽做网站公司sem网络营销
  • 专业建站外包兰州网络优化seo
  • 企业邮箱腾讯杭州seo按天计费
  • 政府网站建设先进个人事迹互动营销
  • 网站建设之织梦模板做国外网站
  • 小程序电商模板seo关键词排名优化品牌
  • 泉州网站优化排名百度关键字优化价格
  • 上海网站建设好处win优化大师官网
  • 适合毕设做的简单网站初学seo网站推广需要怎么做
  • 想把书放到二手网站如何做深圳seo关键词优化
  • 合肥网站优化排名推广合理使用说明
  • 如何网站专题策划互联网推广是什么
  • 用hadoop做网站日志分析推广工作的流程及内容