編譯器這個基本僅適用于某個語言剛開始的時候,C寫的編譯器基本只是解決開始時的雞蛋問題,後面基本上都要自己下蛋。
包括像GCC這種號稱用C實現所有語言編譯(其實並沒有實現所有GCC支援的語言都用C寫的編譯器編譯)的編譯器早就不是純C寫了,包含了很大一部分C++
-
编程入门。语法简单而且少,非常适合入门。但也就只适合入门,想要写再复杂一点的东西,C语言不如其他高级语言方便。
-
高级语言互相调用。C语言有稳定的ABI*,由C语言写出来的库可以被其他编程语言轻松调用。其他语言想要做“互相调用”,通常也是用C语言写一个Wrapper。
-
非常底层的开发。通常是因为对内存布局、函数调用开销等有着极度精确的控制需求,这个时候可能只有C语言可以**。C++虽然说是“零开销抽象”,但是一般很少有人能够完全了解C++为了“抽象”而做出的“必要开销”都发生在哪里。与其去了解C++内部的细节,不如用C语言亲自掌控每一个细节。(简单来说就是C++会在背后帮你做一些事情,但是如果想知道到底帮你做了什么事情是很费精力的,用C语言就不用担心了,因为一切事情都得靠你自己)
*C语言有稳定的ABI:严谨地说应该是在特定的平台+系统+编译器下,是稳定的。
**还有其他的,但我不了解。
上面说的都是C语言有优势的场景。话说我认识的计算机专业的同学,好像都是直接学C++的,那些非计算机专业的,才会学C语言、Python之类的。
一些没人维护的c写的项目,改参数还得看c语言学一学,然后用jna去调,javaer学的痛苦面具
c 语言是对汇编的抽象, 会暴露底层的硬件能力给你,当你对性能有极致的追求的时候就需要用到c了,(cpp也实现了零成本的抽象)比如 cuda
说回大学教育,
本科有很多基础的课程,你学习模拟电路之前学习c语言会更好理解
说回工作
老实讲语言进化都赶不上业务的诉求,很快不同的业务领域都有现成的方案,你写web学的都不是Java,是spring,你搞人工智能研究,学的也不是python, 你学的是numpy,pytorch
编程只是一种思维模式,语言不是重要的。
剩下的要考虑的就是薪资了。
就学校而已,后面学数据结构、计组、OS等内容都涉及C语言并以此为基础开展教学
如果深入系统底层或者嵌入式开发,你会发现C++这种面向对象的语法应用起来还是比较繁琐而且比较占内存,但是C这种数据结构非常简单的语言就非常合适了。
其实C和C++之间,最根本的不同就是对事物分析思想的不同。
大部分这种被认为是系统级的语言是没有什么特定的应用场景的,或者换句话说,它们什么场景都能干。
全场景的哦。
不是程序员,业余脚本专员。C用于底层场景那就嵌入式了,像STM32,C51这些单片机,外设驱动开发,低高电平,GPIO, 中断,看门狗这些概念。不过对现在的高级语言来说,学C可以很好的了解内存,各种类型占的字节数,堆栈对值类型和引用类型的分配,指针这些概念,将来Debug的时候可以更好的发现问题。
进来学习下各位佬的高见
先学难的,再上手容易的不是很好吗,尽管我是从c++开始学的,但差不多
底层的都是C吧
去看 csapp,里面有很多系统方面的内容与 C 的设计紧密关联。
最简单的来说,堆与栈,变量在内存中的分布等,这些东西你用 python 这类高级语言甚至完全无法理解。你如果学好 C,你能分析出一段代码在内存中是怎么分布的,是怎么运行的。
Introduction · GitBook
做一下南大的这个项目,我记得似乎还有 rust 版本的,对系统和 C 的理解都会高一个层次。
看内核源码就用得到了
嵌入式,编译器,操作系统,很多基础软件或者各种平时看不到摸不着的底层。比如你用的 Python 库,你用的是 Python,但那个库的实现使用的可能就是 C。
理科搞科研的,要出图,学的不是python,是matplotlib。(bushi)