簡體   English   中英

MISRA C 2012-規則21.1-以下划線開頭的宏

[英]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.

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