一直被錯愛的C C 語法

2021-08-22 07:29:22 字數 1364 閱讀 3809

最近在為dex-理想中的程式語言模型(整理一些資料

發現c/c++的函式申明語法真的很奇怪:

golang已經在官方blog詳細說明為什麼要改掉c的函式宣告語法

大意如下:

c的函式宣告語法:

rettype funcname(paras){}
函式指標申明語法:

int (*fp)(int a, int b);
如果引數帶函式指標:

int (*fp)(int (*ff)(int x, int y), int b)
如果去掉引數中的函式名:

int (*fp)(int (*)(int, int), int)
如果返回值是個函式指標:

int (*(*fp)(int (*)(int, int), int))(int, int)
這個奇怪的東西已經沒有地球人能夠認出來是個函式申明了。

而go的函式宣告語法:

func funcname(paras) rettype
相應的引數和返回值帶函式申明的語法都非常清晰明了:

f func(func(int,int) int, int) int

f func(func(int,int) int, int) func(int, int) int

閉包呼叫語法也一目了然:

sum := func(a, b int) int  (3, 4)
另外,在c++的模板申明語法裡,也發現了奇怪的地方:

函式模板語法:

templateint myfunc(t a)
模板類宣告語法:

templateclass myclass
模板類中的關鍵字class明確可以看出這是乙個類申明

而模板函式申明語法,卻沒法通過關鍵字得出這是乙個模板函式的宣告語法。

而相應的,如果用golang的函式宣告語法,模板類和模板函式的宣告語法大致應該是這個樣子:

templatefunc myfunc(t a) int

templateclass myclass

可以發現,這兩種模板的宣告語法居然可以出奇的一致:

templatetemplatetype(keyword) templatename ...
由此,可以得出結論,c/c++函式申明是一種奇怪的語法,經不起各種語法組合的考驗,是一種一直被錯愛的語法,應該堅決捨棄。

一直的痛,英語

q 說起來學英語已經很多年了,可一直都沒有把它搞好。也不知道怎麼搞,真的很慚愧。特別的在大學,英語都沒有怎麼學,基本的東西忘了好多,水平可以說不如高中,通過英語等級考試也只是應付將來就業的需要。我很清楚英語的重要性,而且一直以來心裡都有學習英語的慾望,可能是方法不對還是別的什麼原因,英語都弄不好。怎...

一直培養的習慣

習慣成自然,很多不經意的小事都是平時的習慣培養出來的。我也有很多習慣以及自己的積累。記得有些面試者用自己的乙個不經意的小動作為自己贏得了乙份工作 也有面試者因為自己的乙個不經意的小動作而讓面試官第一眼就沒有留下好印象。所以我想我得自己培養自己的一些習慣,可以做做積累還可供自己改正,然後培養出自己更優...

一直很喜歡的 bat

在工作時經常玩玩.bat,為其的簡便性,最近有越玩越喜歡的趨向。bat 批處理,也稱為批處理指令碼。雙擊就執行,非常喜歡。bat裡執行的語句,往往是在控制台裡可執行的字串。例如 新建一字尾名為.bat 檔案,用記事本開啟後,輸入 c python python.exe d test scripts....