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

Tia*_* Li 0 c gcc pointers compiler-warnings gcc-warning

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

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

哪里*a < *b是正确的行为.

在gcc中是否有警告我可以打开,所以每当我编写代码时

a < b
Run Code Online (Sandbox Code Playgroud)

a,bint *编译器会警告我?

Bas*_*tch 5

不能有这样的警告,因为a < b其中两个ab的指针int 是一个合法的测试,你的代码可以做到万无一失.

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

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

从技术上讲,C标准想要ab指向同一个聚合(否则它是未定义的行为,或者至少是未指定的行为),但在大多数系统上,您可以比较任何相同类型的指针.