如果比较两个指针的地址而不是内容,gcc / g ++警告?

时间:2015-10-24 03:13:55

标签: c pointers gcc compiler-warnings gcc-warning

假设我有一个带指针输入的函数

void f(int *a, int *b) {
    if (*a < *b) {
        printf("hello!\n");
    }
}

其中*a < *b是正确的行为。

gcc中是否有警告我每次编写

等代码时都可以打开
a < b

abint *编译器会警告我?

1 个答案:

答案 0 :(得分:5)

不能有这样的警告,因为 a < b ab指向int 的指针是合法的测试您的代码可以在其他地方执行。

一个典型的用例可能是用二分法搜索的指针排序向量来表示一组指针。

您可以考虑使用MELT自定义GCC,例如:添加#pragma以启用此类警告(在某些选定位置),但您需要一些时间来实施警告。我不确定是否值得用一周的时间以这种方式定制GCC。

从技术上讲,C标准希望ab指向相同的聚合内部(否则它是未定义的行为,或者至少是未指定的行为),但在大多数情况下系统可以比较任何相同类型的指针。