最近做代碼評審時,發(fā)現(xiàn)很多同事的編碼都游走在風險的邊沿,其中最顯眼的就是局部變量定義位置比較隨意。
void?Function(void)
{
????int?Var1?=?0;
????int?Var2?=?0;
????//do?someting......
}剛開始學習C語言的時候,感覺也沒啥好解釋的,照著書上和老師的"規(guī)矩"來就可以了,后來又學習了C++,C++對這一塊相對就比較靈活,注意一下作用域,隨時定義隨時用,不需要遵循變量定義必須放在函數(shù)開頭這一規(guī)則。
void?Function(void)
{
????int?Var1?=?0;
????//do?someting......
????int?Var2?=?0;
????//do?someting......
}直到很久很久以前有一次看到別人的C程序也可以像C++這樣靈活的定義變量,才認識到C語言還有不同的標準,也是從那以后開始了解C語言的標準。
所謂“無規(guī)矩、不成方圓”,不同的編譯器會根據(jù)不同的標準引入相關的“規(guī)矩”來約束和指導編程人員進行程序設計。
C語言作為嵌入式領域主力的編程語言,自然也應該不斷的修正和優(yōu)化,那得有專門的人來做這些事 -- C語言標準化委員會,目前編譯器主要參考的有三個標準:
| C89(C90) | 1989年批準、1990年發(fā)布(ISO/IEC 9899: 1990 ) |
| C99 | 1999年發(fā)布(ISO/IEC 9899: 1999) |
| C11 | 2011年發(fā)布(ISO/IEC 9899: 2011) |
當然啦,據(jù)了解目前的標準都已經(jīng)更新到了C17,但具體哪些編譯器對其進行了支持,那又是另外一個故事了。
編譯器為了滿足不同開發(fā)者的需求,以及新舊代碼工程的兼容,都會把C語言標準的相關選擇放開到編譯選項中,開發(fā)人員根據(jù)自身需求進行選擇編譯自己的工程源碼,我們來看看,比如:

最后
? ? ??好了,今天就跟大家分享這么多了。如果你覺得有所收獲,一定記得點個贊~

END
來源:最后一個bug