![]() |
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是一个问题。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 4 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 5 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 5 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 5 月前 |