編寫代碼時,您的首要任務應該是可讀性。大量時間花在調試和維護代碼上,通常遠遠超過最初編寫代碼所花費的時間。因此,使該過程高效是必不可少的。考慮到未來人類讀者的需求(可能是你,當然!)比試圖讓代碼“高效”更重要——這項工作主要可以留給現代編譯器。
這種考慮意味著代碼應該非常仔細地格式化和對齊,并且語言結構應該盡可能簡單和透明。有許多已發布的指南可以幫助解決這些問題。但是,創建可讀代碼并不止于此。
當你編譯代碼時,編程語言被翻譯成機器指令。這是顯而易見的。然而,編譯器實際接收的是一個字符流;有些是實際代碼,但可能有一些不打算翻譯的塊,其他文本可能僅供人類使用:
文檔——代碼中的注釋
臨時刪除的代碼——調試過程的一部分,但它可能會持續存在
特殊調試/跟蹤代碼
每一個的實現都會對可讀性產生一些影響。
文檔
每個人都知道評論是個好主意,但我們大多數人都很懶惰。但是,一些努力是非常值得的。舊式/*.。.*/注釋符號是可以接受的,但新的行尾//。..形式更清晰。仍然需要護理。例如:
int number; // input count
char c; // single character buffer
char buffer[99]; // the input line
很難跟上。對齊就是一切:
int number; // input count
char c; // single character buffer
char buffer[99]; // the input line
并且不要使用標簽;它們不是便攜式的。
臨時代碼刪除
在軟件開發過程中,想要對編譯器“隱藏”部分代碼——將其關閉——并不少見。執行此操作的傳統方法是“注釋掉”——在代碼前加/* ,在后加*/。雖然做起來很快,但它很容易失效,因為編譯器不一定支持注釋嵌套。較新的//表示法稍微好一點,但應用和刪除很繁瑣,并且仍然容易出錯。
實現此結果的最佳方法是使用預處理器指令,因此:
#if 0
#endif
Debug/Trace code
A particular kind of temporarily visible code is instrumentation – extra code added for debugging and/or tracing. Although modern debuggers and tracing tools can do a remarkable job, sometimes instrumenting the code is the only way to glean visibility and figure out exactly what is happening.
The usual way to accommodate this need is using pre-processor directives, as before, but using a symbol to switch them on and off:
#ifdef DEBUG_TRACE
#endif
So, when the symbol DEBUG_TRACE is defined, the debug code is included.
A slightly different approach is to code it like this:
#ifndef NDEBUG
#endif
Although this double negative does seem confusing, some consistency is introduced, as this symbol is used to enable the standard assert() macro. The symbol needs to be defined to suppress debug mode.
審核編輯:郭婷
-
處理器
+關注
關注
68文章
19382瀏覽量
230478 -
編譯器
+關注
關注
1文章
1638瀏覽量
49197
發布評論請先 登錄
相關推薦
評論