[英]MISRA C 2012 - Rule 21.1 - Macros starting with underscore
MISRA C 2012中的規則21.1規定:
#define和#undef不得用於保留的標識符或保留的宏名稱
此規則適用於以下划線開頭的標識符或宏
理由 :
刪除或更改保留宏的含義可能會導致不確定的行為
我不明白為什么宏名稱不是以保留號開頭,即使它不是保留宏也是如此? 例如在我的頭文件中:
#ifndef __MY_HEADER_
#define __MY_HEADER_
或在我正在使用的圖書館中:
#define __I volatile const
我是否應該更改所有代碼和正在使用的庫(這是一個大庫)以符合該規則,還是有一個更簡單的解決方案?
根據C標准(第7.1.3節),保留以_[A_Z]
或__
開頭的所有標識符。 由於保留它們,常識和規則21禁止您修改(重新定義或取消定義)它們(或創建自己的)。
因此,您應該將代碼更改為不使用前導下划線,即使在包含防護的情況下也不要使用宏。
可以找到一些進一步的閱讀,例如,在這里: 在C中包含保護約定
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.