1
7
尽管您可以隐式地将char *转换为空洞*,但是对于那些具有这些类型的函数指针(没有警告),也不能这样做。编译器对函数签名的类型匹配更为小心。 更不用说qsort内部发生的事情是相反的:也就是说,一个void*将被转换成nummp中的char*和strcmp中的const char*。 在这种情况下,编译器应该发出警告。如果您真的必须使用与参数不具有相同类型的函数,也许您应该使用与类型匹配的包装函数,然后在调用原始函数时执行适当的显式转换。 例如:
qsort的现代签名是
问题
|
2
3
简而言之:K&R不知道C。 长话短说:当他们开始的时候, 没有人 他们知道C,所以他们一直在编故事。 (稍微)长答案的轻率形式:语言已经进化(有些人会说 改变 有相当多的K和R,R是书面的,但除非你得到了动态版本变形的电子书版本,在你的副本K和R,R的例子不会跟上“新批准的”(“现在有更多的ANSI!”)语言。 |
3
1
尝试诊断的一种方法是,看看如果将表达式替换为?:只有其中一个。 如果它只发生在strcmp而不是nummp上,那么很可能是因为const char*。我认为,尽管char *总是可以转换为空隙*,但是不能将conchch* *转换为“安全”。 如果两者都是,那么这可能是函数指针的问题,在函数指针中,将char*转换为void*是可行的,但是签名应该是相同的,并且使用void而不是char是一个问题。 |
jxh · 第一列需要#的编译器? 7 年前 |
Pruzo · K&R 5.11函数指针C中的混淆线 8 年前 |
Bar K · c程序的意外行为,试图从K&R解决E6-2 8 年前 |
maja · K&R 1.6数组//数组构造中的数字表示 9 年前 |