天天看點

再探C++數組的size可以是變量

學生在qq群中貼圖:

再探C++數組的size可以是變量

他說:“老師這個不報錯。”

細看,定義數組時:

這不科學,定義數組時,元素個數用變量,沒有這麼玩的!

有人跟上了:“我一直這麼用!”

這還了得,十幾年的修行,就這麼塌了。c和c++一直在規定數組定義時,元素個數必須能确定。作為人工語言,就這麼規定的,也在各種編譯器中得到了貫徹。

學生猜測:“codeblocks 13.12的新支援?”

我隻能先澄清:“不是13.12的事。codeblocks給了個殼,編譯的活是gcc幹的。難道是某版本gcc放松要求了?苦逼的計算機老師,就這麼被坑了。誰查查資料,考證一下。搞清楚前,即使允許,也按規矩來。”

這算是一個解釋。

記吃不記打。去年的學生提到過的問題,我做過初探,居然也忘記了。

菜鳥的優秀品質就在于由于不知而無畏,可以撞到各種錯。這實際上,是原生學習力中的重要部分。一個有程式設計功底的人,看了書上講的,會很快了解,并自覺不去這樣做。這樣的問題,不會由有經驗者發現。

為和菜鳥們厮混而自豪。

今年想将工作推進一步。查了iso/iec14882(c++語言的國際标準)在1998年和2011年出的兩個版本,在8.3.4小節都強調了定義數組時,要用常量!

寫了下面的程式,在codeblocks13.12下調試,編譯器是gcc 4.7.1。

居然連個警告都沒有!

還讓不讓人教c++了。學院在改培養方案,明年不會給大一的教c++了,教c。

再查,說這種寬松是由c99而來的。找到iso/iec 9899:tc2(c語言标準)6.7.5.2小節中,果然有這樣的規定。

決定不再考證。如何在codeblocks中讓這樣的程式不能通過呢?

改設定。

找codeblocks13.12的菜單setting->compiler...,

再探C++數組的size可以是變量

打勾的設定要求用嚴格的iso标準提出警告。

再編譯程式,終于來了警告:

d:\cpp\codeblock\example\main.cpp|7|warning: iso c++ forbids variable length array 'a' [-wvla]|

再想讓報出錯來,沒有找到設定。換一種編譯器,一定能得逞。不折騰了。

想知道,在企業中是如何處理這件事情的。找到了《google c++ 程式設計規範.pdf》,下面是截圖:

再探C++數組的size可以是變量

我不知道所謂變長數組的确切定義,但是啟示卻很明白,老老實實地按正常寫程式。在這方面,不必緊跟放松了的規定。



繼續閱讀