簡體   English   中英

讓編譯器警告是否使用了函數

[英]Have compiler warn if a function is used

我有很多調用strcmpstrcpy C代碼,這會引起各種問題。 我想將其遷移到strncmpstrncpy但現在無法更新所有代碼。 我想在使用函數的地方添加編譯器警告。

以下命令強制替換#define strcmp(x,y) strncmp16(x,y,64)但問題仍然存在於代碼中。

有沒有一種方法可以添加#warning ,以使代碼仍可編譯,但會發出警告,提示您不使用大小函數。

它是一個龐大的代碼庫,必須在四個不同的編譯器(GCC,IAR,GHS和VC)中進行編譯。 它是我們自己的C庫,主要用於嵌入式系統。

編輯:我不希望找到所有的事件。 有成千上萬的工具可用於查找和替換它們。 我希望發出警告,以便下次有人查看該代碼時,他們將評估並修復該代碼。

編輯: Strncmp和strncpy有很多問題,我對此非常了解。 我正在做出明智的決定。 這些功能是在我們自己的C庫不只是從編譯器C庫中的默認功能。

雖然您可以使用#define強制執行錯誤,但C99標准中沒有機制(強制C11中也沒有機制)可以強制發出警告。

如果您使用的是gcc,則可以使用

__attribute_deprecated__

將原型標記為已棄用,例如:

int strcmp(const char *, const char *) __attribute_deprecated__;

對於Visual Studio:在函數原型前加上__declspec(不建議使用),如MSDN中所示

您需要將警告級別提高到3+。

例:

#pragma deprecated(strcpy, strcmp)

此行將導致對每個函數的每次調用都忽略C4995警告。 這些特定功能已經發出C4996警告,但是您可以通過編譯指示關閉該警告:#pragma warning(禁用:4996)

暫無
暫無

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

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