可移植性问题的一个例子
作用是:把给出的long型整数转换为十进制表示,而且对十进制表示中的每个字符都调用函数指针所指向的函数:
void printnum(long n, void (*p)())
{
if (n < 0) {
(*p) ('-');
n = -n;
}
if (n >= 10) {
printnum(n / 10, p);
}
(*p)((int)(n % 10) + '0');
}
可移植性问题分析如下:
第一个问题出在该程序把n的十进制表示的末尾数字转换为字符形式时所用的方法上。给它加上'0'来得到对应的字符表示却不一定合适。程序的加法操作假定了在机器的字符集中数字是顺序排列且没有间隔的。解决办法是使用一张代表数字的字符表。因为一个字符串常量可以用来表示一个字符数组,所以在数组名出现的地方都可以用字符串常量来替换。
下面的表达式是合法的:
"0123456789"[n % 10]
void printnum(long n, void (*p)()) {
if (n < 0) {
(*p)('-');
n = -n;
}
if (n >= 10) {
printnum(n/10, p);
C陷阱与缺陷 第7章 可移植性缺陷 7.11 可移植性问题的一个例子
于 2022-07-31 08:31:02 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)