【发布时间】:2019-03-20 12:12:39
【问题描述】:
C 语言是否保证指向不同命名标准函数的指针必须比较不相等?
根据 6.5.9 等式运算符,¶6,
两个指针比较相等当且仅当两者都是空指针,并且都是指向同一个对象(包括指向对象的指针和开头的子对象)或函数的指针,...
我似乎记得看到过一种解释,声称别名(“相同函数”的多个标识符)对于标准函数是允许的,这种处理的规范候选者是 getc==fgetc 和 putc==fputc;但是,我不知道我可能在哪里看到过它,而且我对这个概念持怀疑态度。
是否有任何官方解释或被广泛接受的论据支持或反对这种可能性?
【问题讨论】:
-
我怀疑
strtoll(),strtoimax()可能是getc()/fgetc() -
注意:C 规范有“允许获取库函数的地址,即使它也被定义为宏。” §7.1.4 1 - 不是该规范在这里应用太多,但确实讨论了“库函数的地址”注意,脚注说“这意味着实现应为每个库函数提供一个实际函数,即使它还提供该功能的宏。” - 嗯。
-
还有 6.9.5:“如果用外部链接声明的标识符在表达式中使用......在整个程序的某个地方,该标识符应该只有一个外部定义”,以及 7.1。 2.6:“库函数的任何声明都应具有外部链接”。如果
getc别名为fgetc,那么我想是否存在“[前] 标识符的外部定义”是值得商榷的。 -
我怀疑“保证指向不同名称的标准函数的指针必须比较不相等”是错误的。我对规范的审查没有发现这样的退休,但我认为要很好地回答你的好问题需要更多的时间。祝你好运。
-
无论标准可能会或可能不会说,experimentation 表明至少在某些实现中,
&fgetc == &getc评估为 true。
标签: c language-lawyer function-pointers c-standard-library