如果要改進C語言,您最希望新增哪些語言特性,移除哪些語言特性?

時間 2021-05-05 21:45:57

1樓:

改進庫管理,引入包的概念,比如引用庫用#import之類概念代替#include這種簡單粗暴的方式。

新增namesapce支援。

改進函式預設作用域,函式定義預設static方式,供外部引用的函式需顯式使用export之類關鍵字。

引用作用域外部(全域性)變數需使用特殊語法字首,比如"@"。例如:

int a=0, b=1;

int func()

5. 常量定義和引用特殊語法字首代替const關鍵字,比如"#"。例如:

float circle_area(float radius)

6. 可以放寬識別符號命名限制,比如用反引號``括起來的字串都為合法識別符號。例如:

//以下都可以算做合法識別符號

int `this-is-a-legal-identifier` = 0;

int `this is also a legal identifier ` = 1;

7. 數字字面量的表達方式可以支援多一點,比如二進位制,比如分段等:

int #a = 0b10001100;//二進位制

int #b = 123_456_789;//分段表示

8. 新增型別推斷和匿名結構體(元組?)支援,函式可返回匿名結構體:

[int, int] func()

main()

9. 新增類似typeof這種語義的支援。

10. switch-case預設不fallthrough,去除break在switch-case語句中的使用,一條case語句可復合多個匹配項,參照swift。

10. 函式名可過載。

暫時只想到這些

2樓:諸葛未央

如果你告訴我你有著豐富的c語言開發經驗,並且參與過大型的c語言專案開發,或者有著很多年的開發經驗,了解語法解析並開發過,so我覺得我會認真地回答這個問題的,不然別意淫了,浪費時間考慮這個幹嘛?好好工作,積累自己的能力,多賺點錢不好嗎?

3樓:Glavo

砍掉原有的巨集,換上 Dlang 那套 static if 類的東西。

儘量減少隱式轉換。

將 icu4c 內建到標準庫。

將 glib 內建到標準庫。

引入 Dlang 的模板。

4樓:

emmm先把有些蛋疼的東西解決一下吧

自動引數提公升

相容型別

試探性定義

progma stdc啥的...

特性的話想要個namespace

5樓:

我希望c語言變得越來越精煉,把最新的一些無關痛癢的標準都去掉。我希望新增的東西是模組系統,零開銷的物件抽象功能,這個可以學習一下go的物件導向思想,但不要學c++。其他的最好不要動,因為c語言的強項就是寫底層和作業系統,唯一的缺陷原生c不適合構建大型系統,當然大牛除外,也不便於後期維護。

所以加一點點抽象功能就可以了,但不要過頭就好。

6樓:

目前這個狀態就很好,不要加什麼亂七八糟的東西

我看到有答案說加入多返回值就好了,我只想說把多返回值組成結構體有那麼難?

乙個本身就致力於系統級開發,與硬體緊密聯絡的語言,要那麼多亂七八糟的特性幹嘛。

7樓:Belleve

Packed struct / bitfield(現在的 struct / bitfield 都沒有標準化的、嚴格禁止新增 padding 的變體)

類似 Pascal 的 var 引數(C++ 的 reference)

至於過載嘛,其實用 Haskell 的那種 typeclass 更好一點,當然要引入這個肯定得加 HM 式的 parametric polymorphism 了

8樓:dc lin

覺得C語言有幾個是很需要加入的:

模組。pascal在沒有類的時代就引入了模組了,實際上表現也比c的標頭檔案形式好得多,現在幾乎所有語言都加入模組了,除了那些已經不再繼續發展的「死語言」,所以不要再猶豫了。

標準的錯誤處理模式。在C中到目前還沒有標準的錯誤處理模式,最傳統的共享乙個全域性的錯誤號,這種在多執行緒模式下容易混亂,採用返回值模式又喪失了函式返回值可以參與表示式的優勢,採用引數法則顯得很臃腫。還是喜歡異常的處理方法,不過如何在C中優雅實現需要斟酌。

預編譯指令的替換,這個本質上是編譯期計算,所以乾脆和模組一起引入乙個專用的編譯語言結構算了。

9樓:silence

我覺得c語言沒什麼好改的了,作為一門貼近底層的語言,c很好的平衡了到api層面的距離和到程式設計人員之間的距離,對作業系統擁有強大的控制能力,又不會讓程式設計人員寫程式的時候感到卡手。相比之下,c++離底層的距離遠了很多。

10樓:Lyken

我想法跟 @孫明琦 的差不多,c 語言回歸最初」彙編的對映「是最好的。一門語言能做好一件事就可以了,所謂的」優秀特性「就交給其他語言或者是語法糖吧。

一定要說的話,我希望 C 能提供兩個語言之外的特性 -- 官方欽定的包管理器和構建工具。作為乙個極度依賴三方庫的語言,這兩項工具的缺位帶來了太多負面影響。

11樓:原子筆

C 語言往上面(抽象)發展肯定是會被噴的,所以只能往下面(平台相關的)發展,比如_Atomic 這種玩意兒。

所以C語言多和彙編一級的東西多打通就好了,典型如有棧協程(無棧協程應該交給C++去搞),比如說支援標記乙個位址的內容已經被no alias move了(類似於std::move,標識這塊空間已經不被使用了 ,編譯器可以在上面隨便放點臨時的東西啦,不用非得浪費堆疊,,很多結構體的部分成員被當作輸入引數來使用,其實往往在函式一開始之後,這些空間就可以隨便用了 ),,事情多的很,經常寫彙編的人清楚的很C語言可以優化和向下發展的空間非常巨大。

12樓:

Continuation,既足夠底層,體現出通用彙編應有的靈活性,同時也擁有了足以叫板一大波,比如函式式這種所謂具有高階抽象能力的,語言的特性。

Shared關鍵字(及語義),取代共享指標,簡單高效又徹底的告別記憶體管理難題。

有人提到多返回值,這的確也是乙個比較通用的需求,但不一定是返回值,應該一併作為引數看待更加合理。類似swift那樣,要更通用靈活,便於優化,語法上也可以做到更加簡潔,方便元語言設計。

13樓:暮無井見鈴

或許該出現個更像結構化彙編的 C 變體(不是改進)?

不少人像寫彙編一樣寫 C ,遲早遇到越界訪問、嚴格別名使用違規等 UB 。

另外標準 C 是不允許函式指標和物件指標互轉的,能轉的都是編譯器擴充套件。

如果出一些理論上對應彙編能正確就沒有 UB 的 C 變體,在某些領域(如二進位制安全)可能會更靈活。

14樓:

題主的原問題為《如果要改進C語言,您認為什麼特性最希望那些特性被加入到C語言中?》。

--- 原答案如下 ----

多返回值。

這樣可以大大減少使用傳入乙個指標來獲取額外返回資訊的做法。例如:

long int strtol(const char *nptr, char **endptr, int base);

使用多返回值寫成:

[long int, char *] strtol(const char *nptr, int base);

呼叫的語法可以設計為:

[value, endptr] = strtol(my_string, 10);

只對其中乙個返回值感興趣時:

[value] = strtol(my_string, 10);

[, endptr] = strtol(my_string, 10);

放到變數初始化裡:

[long value, char *endptr] = strtol(my_string, 10);

return 語句:

return [value, endptr];

15樓:宅學部落-王利濤

看看C11標準就知道,以後C語言以後的發展方向了。

現在程式語言需要的很多庫,C語言應該會跟進吧,比如多執行緒、IO、字串等。

GNU C在C標準的基礎上做了很多擴充套件,解決了在實際程式設計中,C標準沒有定義或者需要改進的地方

比如:零長度陣列,用於變長結構體。

比如:__attribute__屬性宣告,尤其對於嵌入式底層開發,非常有用。

縱觀C語言的發展過程,並不是一成不變,也是在吸收其它語言的一些優點和特定,其它編譯器的一些擴充套件,作為自己新的C語言標準。

16樓:陳林熙

C並不C++的乙個子集.但是為什麼現在還要學C,現在的趨勢是都在往C++哪兒趕,各種平台的都有C++的編譯器,就連keil都投入CLang的懷抱了,學習一門語言,無非就是用它來幹任何事.C++雖然不能幹任何事,不過比起C來,要方便的多.

C語言為何不改進陣列?

大江 變長陣列怎麼實現的?要不就是鍊錶封裝 要不就是先給你開乙個固定大小的記憶體區,不夠了?再給你開乙個固定大小的,把原來的拷貝過去 語言是底層硬體的模擬 還有,陣列這種東西壓根就是以訛傳訛,所謂的陣列void a 10 的真正含義,其實指的是從位址a往上查10個void型別長度的記憶體單元 所謂的...

學C 之前要學c語言嗎?

同時學。既要掌握printf scanf fprintf fscanf,也要掌握istream ostream ifstream ofstream.學著學著你就會發現,c語言和c 沒啥不同,知識點是互通的 大碼猴 C語言是面向過程程式設計 C 是物件導向程式設計 先了解面向過程再了解物件導向 建議先...

大學C語言課程要怎麼學?

對程式設計沒啥興趣你學了通訊.好吧,通訊應該會開很多和計算機類似的課程。如果還想自學C語言,可以看看程式設計入門 C語言 浙江大學 中國大學MOOC 慕課 其實教材只是講個概念,我建議你可以去圖書館找純習題書,最好是分章節的習題,比如說你看完C語言的資料型別,那麼這一章節的習題全部是關於資料型別的,...