假设我有一个带指针输入的函数
void f(int *a, int *b) {
if (*a < *b) {
printf("hello!\n");
}
}
其中*a < *b
是正确的行为。
gcc中是否有警告我每次编写
等代码时都可以打开a < b
当a
,b
为int *
编译器会警告我?
答案 0 :(得分:5)
不能有这样的警告,因为 a < b
a
和b
指向int
的指针是合法的测试您的代码可以在其他地方执行。
一个典型的用例可能是用二分法搜索的指针排序向量来表示一组指针。
您可以考虑使用MELT自定义GCC,例如:添加#pragma
以启用此类警告(在某些选定位置),但您需要一些时间来实施警告。我不确定是否值得用一周的时间以这种方式定制GCC。
从技术上讲,C标准希望a
和b
指向相同的聚合内部(否则它是未定义的行为,或者至少是未指定的行为),但在大多数情况下系统可以比较任何相同类型的指针。