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

c做网站室内设计效果图怎么收费标准

c做网站,室内设计效果图怎么收费标准,wordpress手机编辑器插件下载,wordpress高级图片主题目录 一、整数溢出 溢出 如何防止溢出 二、为函数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.yayakq.cn/news/863366/

相关文章:

  • 横岗网站设计顶尖文案
  • 怎么做营销型网站做奥网站
  • 公司网站宣传设计建设文化产业网站的方案
  • 北京知名网站建设58招商加盟项目
  • 优秀企业网站设计欣赏一个空间怎么放两个网站
  • 长沙网站设计费用屏蔽收索引擎抓取网站
  • 阿里云备案网站备案外贸搜索引擎
  • 重庆网站制作一般需要多少钱凯里网站开发
  • 企业为什么要建立自己的网站小程序变成网页链接
  • 大公司网页设计用什么软件好如何进行搜索引擎优化 简答案
  • 成都建设二维码网站深圳模板网站建设公
  • 建设造价信息网站直播软件app下载免费
  • 企业微网站与手机微信做品牌折扣微信推广的网站
  • 做网站怎样使图片自由移动wordpress怎么修改logo尺寸
  • 网站设计就业中山网站建设找阿 n 2
  • 做网站的出路纯html5网站源码
  • 网投网站制作上海优化网站公司哪家好
  • 深圳网站建设网络公司wordpress单页主题营销
  • 互助网站制作公司抚州购物网站开发设计
  • 漯河哪个网站推广效果好怎么样才算是一个网站页面
  • 企业网站营销的优缺点及案例南平市建设集团网站
  • 甘肃网站建设推广服务wordpress 增加侧边栏
  • word文档做网站小型企业网站设计教程
  • 网站做业务赚钱吗三种人不适合做程序员
  • 有源码手机怎么搭建网站哪些网站做农产品电子商务
  • 济南建网站送400电话互联网公司加盟
  • 南京网站维护公司有哪些苏州新区网站制作公司
  • 咋么做网站百度关键词优化多久上首页
  • 网络上如何推广网站更换dns能上国外网站吗
  • 网站首页快照应该怎么下拉框关键词软件