书上有一句话不太明白,希望解释一下
时间:2008-05-09 11:18:24
来源:论坛整理 作者: 编辑:chinaitzhe
的标准库函数相同,但已对相应的界面进行了一些小的修改。例如ANSI 版memchr 函数的界
面是:
void* memchr(const void* s, int c, size_t n);
这里memchr 的内部将整数c 当作unsigned char 来处理。在本书的许多地方,读者都
会看到字符类型被显式地声明为unsigned char,而不是int:
void* memchr(const void* pv, unsigned char ch, size_t size);
ANSI 标准将所有的字符变元都声明为int,是为了保证其库函数同样可以用于ANSI 标
准之前编写的非原型程序,这时程序使用extern 声明函数。
其中的“这时程序使用extern 声明函数”该如何理解呢?
网友回复:没有看书
但估计意思是
假如是ANSI的标准,则行为 extern int f()之类的形式
假如非ANSI则 int f()
你可以查下extern要害字的用法
网友回复:ANSI是用头文件,之前是用extern
所以ANSI不能改变以前版本的函数原型
猜的
网友回复:还是没理解。
网友回复:用extern声明是为了能够通过编译器的语法与函数类型检查
但实际调用的仍然是原来的库函数
网友回复:呵呵,看了翱翔的鱼的解释有点理解了,请问一下假如不加extern声明的话就不存在语法与函数类型检查吗?
谢谢!
网友回复:用头文件的话用会把库里的函数声明包含进去
这时改动原型有时不会影响应用
像unsigned char改成int,调用的时候会做隐式类型转换
用extern声明是开发者自己写
这时库里的函数原型必须和开发者的保持一致,要不然链接会出错
所以库函数的原型只能适应ANSI之前的形式
这个问题关系不大,所以我就猜了一下原因
确定答案要等高人来给了
关键字:书上,一句话,明白,希望,解释一下,
上一篇:小问题--程序编译错误
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面