簡體   English   中英

C Unix / Linux編程:md_addr_t是哪種類型?

[英]C Unix/Linux programming: Which type is md_addr_t?

GCC給我以下內容:

warning: passing argument 2 of ‘_panic’ discards qualifiers from pointer target type

misc.h:191: note: expected ‘char *’ but argument is of type ‘const char *’

第二個參數的類型為md_addr_t 我如何將其轉換為char*以及md_addr_t是什么意思? (手冊頁都無法幫助我或Google)

拉爾斯曼人已經正確指出了原因。 強制轉換const時會看到此警告,即如果函數采用non-const參數但您傳遞了const參數,那么如果函數修改了傳遞的參數,則您將具有未定義的行為。 在代碼中為typedef的md_addr_t與此無關。 在代碼中,您收到有關使用panic警告,定義如下(來自鏈接中ss-ppc-little.tgz的信息):

#ifdef __GNUC__
/* declare a panic situation, dumps core */
#define panic(fmt, args...)     \
  _panic(__FILE__, __FUNCTION__, __LINE__, fmt, ## args)

void
_panic(char *file, char *func, int line, char *fmt, ...)
__attribute__ ((noreturn));
#else /* !__GNUC__ */
void 
panic(char *fmt, ...);
#endif /* !__GNUC__ */

在Unix / Linux系統上,已定義__GNUC__ ,因此使用第一個定義,即在打印消息前先輸入待處理的文件名( __FILE__ ),函數名( __FUNCTION__ )和行號( __LINE__ )。 (有關詳細信息,請參_panic 鏈接 。)在這里,您可以看到_panic char*作為第一個和第二個參數,但是傳遞的參數是__FILE____FUNCTION__ ,其中__FUNCTION__static const char[] 您可以將_panic(char *file, char *func, int line, char *fmt, ...)更改為_panic(char *file, const char func[], int line, char *fmt, ...)_panic(char *file, const char *func, int line, char *fmt, ...) -編譯器在抱怨修正您的警告。 由於__FILE__也是常量,因此您可以考慮更改為_panic(const char *file, const char *func, int line, char *fmt, ...)
希望這可以幫助!

grep -R md_addr_t /usr/include在良好填充不返回任何/usr/include ,也不門鈴。 它必須在您的應用程序/庫中。

在任何情況下,強制轉換為char *都只是前綴(char *) ,這也是保證始終在C語言中正常工作的少數強制轉換之一,盡管強制轉換const可能意味着有人將要編寫讀寫-僅內存,不能保證正常工作...

暫無
暫無

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

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