可移植性缺陷? 使用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)); } 程序的生命期往往超过了编程人员最初的预期,即使这个程序只是编程人员出于自用目的而编写的。?
|