我看到a snippet of code on CodeGolf這是一個編譯器炸彈,其中main
被聲明爲一個巨大的數組。我嘗試以下(無彈)版本:爲什麼將main聲明爲數組編譯?
int main[1] = { 0 };
這似乎編譯罰款鏘之下,只有在GCC警告:
警告:「主」通常是一個函數[ - Wmain]
生成的二進制文件當然是垃圾文件。
但爲什麼它編譯?它是否被C規範允許?我認爲相關的部分說:
5.1.2.2.1計劃啓動
稱爲在程序啓動的功能被命名爲主力。該實現沒有聲明這個函數的原型。它應該用int類型的返回類型定義,並且不帶任何參數或者帶有兩個參數,或者以某種其他實現定義的方式定義。
「某些其他實現定義的方式」是否包含全局數組? (在我看來,該規範仍然指代函數。)
如果不是,它是一個編譯器擴展嗎?或者是工具鏈的一個特徵,用於其他目的,並且他們決定通過前端使其可用。
它**不**編譯。 ISO C禁止零大小的數組。 – Jens
C規範不允許。編譯器通常會執行規範未涵蓋的內容。 –
相關問題:[一個全局變量的程序如何調用main而不是主函數?](http://stackoverflow.com/q/32851184/1708801)。我想也受到了一個codegolf問題的啓發。 –