簡體   English   中英

是否可以將函數指針與函數進行相等性比較?

[英]Can I compare a function pointer to a function for equality?

這是有效的C99代碼嗎? (我想我在問它是否可攜帶)

void test(void){
return;
}

void (*fp)(void) = test;

if (fp == test){ <--- This line
    printf("Success\n");
}

我只收集可以比較的相同類型的指針,所以也許我的問題是像“ test”這樣的函數名稱是否只是指針別名? 也許有人可以告訴我我的問題比我能做到的更好:)

該代碼是有效的ANSIC。

實際上發生的是,函數名稱(例如代碼中的test會自動轉換為函數的指針。

您可以將test更改為&test ,結果是相同的。

是的,很好。 在這種情況下,C標准很容易解釋(C11 6.3.2.1/4):

函數指示符是具有函數類型的表達式。 除非是sizeof運算符或一元&運算符的操作數,否則將類型為“函數返回類型”的函數指定符轉換為具有類型為“函數返回指針的指針”的表達式。

在您的情況下, test是具有函數類型的表達式。 它被轉換為void(*)(void)類型的函數指針。 這是與fp兼容的指針類型,因此==運算符允許它。

關於相等運算符== ,標准說(C11 6.5.9,重點是):

且僅當兩個都是空指針,並且兩個指針都是指向同一對象的指針(包括指向對象和位於其開頭的子對象的指針)或函數時兩個指針的比較結果相等

暫無
暫無

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

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