簡體   English   中英

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

abint *編譯器會警告我嗎?

不能有這樣的警告,因為a < b其中兩個ab是指向int 是一個合法的測試 ,你的代碼可以做到萬無一失。

典型的用例可能是通過二分法搜索的指針的排序向量來表示一組指針。

您可能考慮通過添加#pragma (在某些選定的地方)啟用這樣的警告(例如,在某些選定的位置)來使用MELT自定義GCC,但是您將需要一些時間來實現警告本身。 我不確定是否值得花一個星期的時間來自定義GCC。

從技術上講,C標准希望ab指向相同的聚合(否則它是未定義的行為,或者至少是未指定的行為),但是在大多數系統上,您可以比較任何相同類型的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM