全局变量的初值——Ada应用实例之七

全局变量的初值——Ada应用实例之七

 

  有一些帖子(如[1])讨论C语言中全局变量初值的问题。

Ada语言中,除了访问类型的变量有默认的初始值NULL之外,其它任何类型的变量都没有默认的初始值。

  各种操作系统在分配一个存储页面时采用不同的处理,有的把整个页面清0,有的则不作任何处理。因此,使用一个没有初始化过的变量的值,可能导致出错。

  Ada提供了一个参数为Normalize_Scalars的编注(pragma),其功能是指示编译器对没有初值的纯量(scalar)变量赋予一个可预见的值,如果可能,这将是一个超出范围的值。

  例如:

  Pragma Normalize_Scalars;

  My_Variable : Positive;

  …

  Some_Other_Variable := My_Variable;

  上例第2行声明了一个类型为Positive的变量My_Variable,编译器将根据第1行给My_Variable赋予初值0,这是一个超出范围的数值。在执行最后一行赋值语句时,将引发异常。这样就可提醒开发者要正确设置My_Variable的初值。

  这个编注的目的是消除对默认初值的依赖。许多UNIX环境的C编译/连接器提供了“DEAD BEEF”的选项,其功能是对没有初值的静态数据初始化为0xDEADBEEF,这对于整型、浮点型和字符型都是超出范围的。Normalize_Scalars可以说是“DEAD BEEF”的一个高级版本。

  Ada95Ada2005标准在附录HSafety and Security”中定义编注Normalize_Scalars,这就是说,标准认为这是提高软件安全性的一个措施。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值