C语言的应用场景是什么?

編譯器這個基本僅適用于某個語言剛開始的時候,C寫的編譯器基本只是解決開始時的雞蛋問題,後面基本上都要自己下蛋。
包括像GCC這種號稱用C實現所有語言編譯(其實並沒有實現所有GCC支援的語言都用C寫的編譯器編譯)的編譯器早就不是純C寫了:stuck_out_tongue_winking_eye:,包含了很大一部分C++

  1. 编程入门。语法简单而且少,非常适合入门。但也就只适合入门,想要写再复杂一点的东西,C语言不如其他高级语言方便。

  2. 高级语言互相调用。C语言有稳定的ABI*,由C语言写出来的库可以被其他编程语言轻松调用。其他语言想要做“互相调用”,通常也是用C语言写一个Wrapper。

  3. 非常底层的开发。通常是因为对内存布局、函数调用开销等有着极度精确的控制需求,这个时候可能只有C语言可以**。C++虽然说是“零开销抽象”,但是一般很少有人能够完全了解C++为了“抽象”而做出的“必要开销”都发生在哪里。与其去了解C++内部的细节,不如用C语言亲自掌控每一个细节。(简单来说就是C++会在背后帮你做一些事情,但是如果想知道到底帮你做了什么事情是很费精力的,用C语言就不用担心了,因为一切事情都得靠你自己)

*C语言有稳定的ABI:严谨地说应该是在特定的平台+系统+编译器下,是稳定的。
**还有其他的,但我不了解。

上面说的都是C语言有优势的场景。话说我认识的计算机专业的同学,好像都是直接学C++的,那些非计算机专业的,才会学C语言、Python之类的。

1 Like

一些没人维护的c写的项目,改参数还得看c语言学一学,然后用jna去调,javaer学的痛苦面具 :face_with_spiral_eyes:

c 语言是对汇编的抽象, 会暴露底层的硬件能力给你,当你对性能有极致的追求的时候就需要用到c了,(cpp也实现了零成本的抽象)比如 cuda

说回大学教育,
本科有很多基础的课程,你学习模拟电路之前学习c语言会更好理解

说回工作
老实讲语言进化都赶不上业务的诉求,很快不同的业务领域都有现成的方案,你写web学的都不是Java,是spring,你搞人工智能研究,学的也不是python, 你学的是numpy,pytorch

3 Likes

编程只是一种思维模式,语言不是重要的。
剩下的要考虑的就是薪资了。

就学校而已,后面学数据结构、计组、OS等内容都涉及C语言并以此为基础开展教学

如果深入系统底层或者嵌入式开发,你会发现C++这种面向对象的语法应用起来还是比较繁琐而且比较占内存,但是C这种数据结构非常简单的语言就非常合适了。

其实C和C++之间,最根本的不同就是对事物分析思想的不同。

大部分这种被认为是系统级的语言是没有什么特定的应用场景的,或者换句话说,它们什么场景都能干。

1 Like

全场景的哦。

不是程序员,业余脚本专员。C用于底层场景那就嵌入式了,像STM32,C51这些单片机,外设驱动开发,低高电平,GPIO, 中断,看门狗这些概念。不过对现在的高级语言来说,学C可以很好的了解内存,各种类型占的字节数,堆栈对值类型和引用类型的分配,指针这些概念,将来Debug的时候可以更好的发现问题。

1 Like

进来学习下各位佬的高见

嵌入式是c,看源码都是结构体和指针。学了c再去学cpp。

1 Like

先学难的,再上手容易的不是很好吗,尽管我是从c++开始学的,但差不多

底层的都是C吧

去看 csapp,里面有很多系统方面的内容与 C 的设计紧密关联。

最简单的来说,堆与栈,变量在内存中的分布等,这些东西你用 python 这类高级语言甚至完全无法理解。你如果学好 C,你能分析出一段代码在内存中是怎么分布的,是怎么运行的。

Introduction · GitBook
做一下南大的这个项目,我记得似乎还有 rust 版本的,对系统和 C 的理解都会高一个层次。

2 Likes

看内核源码就用得到了

嵌入式,编译器,操作系统,很多基础软件或者各种平时看不到摸不着的底层。比如你用的 Python 库,你用的是 Python,但那个库的实现使用的可能就是 C。

1 Like

理科搞科研的,要出图,学的不是python,是matplotlib。(bushi)

1 Like