当前位置:网站首页>C陷阱与缺陷 第7章 可移植性缺陷 7.1 应对C语言标准变更
C陷阱与缺陷 第7章 可移植性缺陷 7.1 应对C语言标准变更
2022-07-30 17:10:00 【weixin_客子光阴】
可移植性缺陷
使用C语言的一个首要原因就是,C程序能够方便在不同的编程环境中移植。
ANSI C标准的发布能够在一定程度上解决问题,但并不是万应灵药。
可移植性是一个涵盖范围非常广泛的主题
Mark Horton在它的著作How to Write Portable Software in C中详细地讨论了这个主题。
应对C语言标准变更
ANSI C标注允许这样写,但在老的机器上不能运行。
double square(double x) {
return x * x;
}
以前旧的形式能在旧的机器上运行。
double square(x) double x; {
return x * x;
}
旧形式的声明:
double square();
省略了参数类型的说明,这在ANSI C标准中也是合法的。因为这样的声明并没有对参数类型
做成任何说明,这意味着如果在函数调用是传入了错误类型的参数,函数调用就会不声不响地失败。
double square();
int main() {
printf("%g\n", square(3));
}
参数类型不匹配,程序打印出来的将是一堆“垃圾信息”。
//error
上面的程序改写为这样:
double square(double);
int main() {
printf("%g\n", square(3));
}
3会自动转换为double类型。另一种改写方法是,在这个程序中显式地给函数square传入一个double类型的参数:
//correct
double square();
int main() {
printf("%g\n", square(3.0));
}
程序的生命期往往超过了编程人员最初的预期,即使这个程序只是编程人员出于自用目的而编写的。
边栏推荐
猜你喜欢

DLCM - 基于列表上下文信息的重排序模型

JMeter Notes 3 | JMeter Installation and Environment Instructions

You are a first-class loser, you become a first-class winner

字符串复制、拼接、比较以及分割函数总结(一)

ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法

MySQL 8.0.29 解压版安装教程(亲测有效)

Excel导入和导出

升级Win11后不喜欢怎么退回Win10系统?

Tensorflow模型量化(Quantization)原理及其实现方法
![[MRCTF2020]Ezaudit](/img/80/d4656abdff20703591ffdc3f5a5ebc.png)
[MRCTF2020]Ezaudit
随机推荐
阿里巴巴中国站获得1688商品分类 API
Google earth engine如何实现我们时间列表的排列和选取
You are a first-class loser, you become a first-class winner
Shell implementation based on stm32
HUAWEI CLOUD data governance production line DataArts, let "data 'wisdom' speak"
有没有并发系统设计的经验,我该怎么说?
olap——入门ClickHouse
What does a good resume look like in the eyes of a big factory interviewer?
OpenCV形状检测
SLIM: Sparse Linear Methods (TopN推荐)
MySQL超详细安装教程 手把手教你安装MySQL到使用MySQL 最简单的MySQL安装方式,这种方式装,卸载也简单
.NET 6.0中使用Identity框架实现JWT身份认证与授权
[MRCTF2020]Ezaudit
新零售saas小程序如何探索数字化门店的破局之路?
Paper reading (63): Get To The Point: Summarization with Pointer-Generator Networks
JMeter笔记4 | JMeter界面介绍
第5章 SQL高级处理
LeetCode318: Maximum product of word lengths
实现web实时消息推送的7种方案
中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030