gcc/g++ 如果比较两个指针的地址而不是内容会发出警告?
gcc/g++ warning if comparing two pointers' addresses instead of contents?
假设我有一个带有指针输入的函数
void f(int *a, int *b) {
if (*a < *b) {
printf("hello!\n");
}
}
其中 *a < *b
是正确的行为。
gcc 中是否有一个警告,我可以在每次编写诸如
之类的代码时打开它
a < b
当 a
、b
是 int *
时,编译器会警告我吗?
不可能有这样的警告,因为 a < b
其中 a
和 b
都是指向 int
是一个合法的测试,您的代码可以在其他地方进行。
一个典型的用例可能是通过二分法搜索的指针的排序向量来表示一组指针。
您可以考虑使用 MELT 自定义 GCC,例如添加 #pragma
以启用此类警告(在某些选定位置),但您需要一些时间来实现警告本身。我不确定您是否值得花一周的时间以这种方式自定义 GCC。
从技术上讲,C 标准希望 a
和 b
指向 same 聚合内部(否则它是未定义的行为,或者至少是未指定的行为), 但在大多数系统上你可以比较任何相同类型的指针。
假设我有一个带有指针输入的函数
void f(int *a, int *b) {
if (*a < *b) {
printf("hello!\n");
}
}
其中 *a < *b
是正确的行为。
gcc 中是否有一个警告,我可以在每次编写诸如
之类的代码时打开它a < b
当 a
、b
是 int *
时,编译器会警告我吗?
不可能有这样的警告,因为 a < b
其中 a
和 b
都是指向 int
是一个合法的测试,您的代码可以在其他地方进行。
一个典型的用例可能是通过二分法搜索的指针的排序向量来表示一组指针。
您可以考虑使用 MELT 自定义 GCC,例如添加 #pragma
以启用此类警告(在某些选定位置),但您需要一些时间来实现警告本身。我不确定您是否值得花一周的时间以这种方式自定义 GCC。
从技术上讲,C 标准希望 a
和 b
指向 same 聚合内部(否则它是未定义的行为,或者至少是未指定的行为), 但在大多数系统上你可以比较任何相同类型的指针。