V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Canglin
V2EX  ›  C

关于 C 语言的相关问题

  •  1
     
  •   Canglin · 166 天前 · 2785 次点击
    这是一个创建于 166 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我是一个初学者,目前已经看完了 C primer plus ,但是感觉什么都做不了,想问问朋友们想学习 C 的网络、多线程、数据库、GUI 相关内容应该看点什么书
    第 1 条附言  ·  166 天前
    不好意思,我补充一下,目前已经上班了,工作方向会转移至实时计算方面的工作,所以想学习 C ,目前第三方工具用的就是纯 C 写的,所以目前不考虑其他语言,就是想问问 C 的学习路径是什么,或者说 C 的看书路径,谢谢大家
    33 条回复    2024-06-03 21:08:02 +08:00
    BeautifulSoap
        1
    BeautifulSoap  
       166 天前 via Android
    虽然但是,一个没什么特定需求驱动的人,初学真不应该学 c ,c 艹
    0o0O0o0O0o
        2
    0o0O0o0O0o  
       166 天前 via iPhone
    该学第二三四五六七八门语言了
    crysislinux
        3
    crysislinux  
       166 天前 via Android
    搞这些见效慢,可以买块板子搞嵌入式,lvgl gui 一写,感觉立马就来了。
    Canglin
        4
    Canglin  
    OP
       166 天前
    @BeautifulSoap #1 单位有相关需求,大概就是类似 flink 数据抽取方面的,目前一直都是用的第三方公司的,我也想学习一下,可能以后会抛弃第三方公司
    Canglin
        5
    Canglin  
    OP
       166 天前
    @0o0O0o0O0o #2 会点 Java 跟 Python
    enchilada2020
        6
    enchilada2020  
       166 天前 via Android
    @BeautifulSoap 初学从 C 入门是科班路线嘛 后面跟着的必然是计算机组成原理跟操作系统 没啥问题
    Canglin
        7
    Canglin  
    OP
       166 天前
    @crysislinux #3 从业方向不是这些
    Canglin
        8
    Canglin  
    OP
       166 天前
    @enchilada2020 #6 已经上班了,只是想跟一下单位的步伐
    smallboy19991231
        9
    smallboy19991231  
       166 天前
    做完 C 程序設計語言的習題你就有工作水平了,只是語言方面
    enchilada2020
        10
    enchilada2020  
       166 天前 via Android
    打扰了 原来不是学生 那讲究生产力想见效快的话建议直接 Python 就行了 C 不适合你
    smallboy19991231
        11
    smallboy19991231  
       166 天前
    “目前已经看完了 C primer plus”
    如果你只是看完還不夠,習題很重要,C 語言搭配的計算機底層知識也需要再學;
    最好 C 程序設計語言+深入理解計算機系統 兩本書一起搭配看看
    Canglin
        12
    Canglin  
    OP
       166 天前
    @enchilada2020 #10 主要是目前工作内容涉及实时计算这一块,python 不太适合
    Canglin
        13
    Canglin  
    OP
       166 天前
    @smallboy19991231 #9 如果想学习高级知识呢,例如多线程与网络之类的
    javak
        14
    javak  
       166 天前
    1. 咋会啥都做不了,写个命令行小工具肯定是可以的三。
    2. 下一本看「 UNIX 高级环境编程」和 「 UNIX 网络编程」
    GeruzoniAnsasu
        15
    GeruzoniAnsasu  
       166 天前   ❤️ 1
    @Canglin

    首先 C 语言的标准库内容很少,很底层。 网络、多线程、数据库、GUI 全都跟标准库八竿子打不着一块

    然后 C 生态的必读进阶书是
    APUE (Advanced Programming in the UNIX Environment)

    这本书介绍了 *nix 编程接口的方法面面,可以认为是《 windows 核心编程》的 *nix 对标 —— 里面所有的程序都是 C 语言写的。

    但就算你啃完了这本书,你离 C 语言生态还是很远,因为 C 真正的应用场景是各种历史悠久的库和框架,比如 libevent/libev/libuv, YACC/Bison, GTK…… 以及诸如 Nginx 插件这种非常特定的领域。就算是嵌入式,但凡有点封装的也一定都有 C++的接口,C 的意义就是当你需要非常原始的机制 start from scratch 的时候不至于要写一大堆汇编
    Canglin
        16
    Canglin  
    OP
       166 天前
    @GeruzoniAnsasu #15 学习了,我一直认为 C 的处境跟 Java 或者 Python 一样,只不过更贴近底层,没想到这么底层
    masterclock
        17
    masterclock  
       166 天前
    类似 flink... 的情况下,为什么会学 C ?一点关联都没有
    实时计算是什么意思?
    Canglin
        18
    Canglin  
    OP
       166 天前
    @masterclock #17 字面意思,就是实时计算业务
    cabing
        19
    cabing  
       166 天前
    flink 搭个环境,找本书跑下,简单使用感觉还是挺容易的。。

    没有必要 c 吧。
    yfang
        20
    yfang  
       166 天前
    除了嵌入式和操作系统底层和高性能场合外
    最好不要用 C 语言写什么

    最佳路径就是做项目
    henix
        21
    henix  
       166 天前   ❤️ 3
    C 语言本身内容较少,而且抽象层次很低,属于“系统编程语言”,也就导致,网络、IO 、GUI 这些功能在其他编程语言中可能已经抽象到标准库中了,但 C 语言标准库不包含这些,要用的话应该学习操作系统提供的 API 。不同的操作系统提供的 API 是不同的,需要分别去学,或者使用一些别人封装好的跨平台库。

    Linux 推荐 Linux/UNIX 系统编程手册 https://book.douban.com/subject/25809330/
    Windows 推荐 Windows 系统编程 https://book.douban.com/subject/5323432/
    关于库的底层实现的 程序员的自我修养 https://book.douban.com/subject/3652388/

    看了这些你能理解一些网络库的底层实现原理了,当然实际应用中可能更多会使用别人的开源库。比如 libuv 、mysql 的 C 接口、GTK 等等,那就去看具体的库的文档。
    BeautifulSoap
        22
    BeautifulSoap  
       166 天前 via Android
    @enchilada2020 并不一定,哪怕是科班线路,也不一定要从 C 入门。我觉得 C 更应该被视为有一定编程基础和对计算机结构基础有了解之后的进阶知识。一上来就 C 只会打击学习热情
    比如麻省理工 CS 就是最早用 Python
    dayeye2006199
        23
    dayeye2006199  
       166 天前   ❤️ 1
    https://build-your-own.org/

    编译器,关系数据库,KV 数据库,web 服务器。
    一般搞点具体的可以维持学习兴趣
    felixlong
        24
    felixlong  
       166 天前
    @Canglin 学 C 最简单的就是用 C 去刷刷 leetcode 就行了。知道 C 指针/数组/函数基本上就会了。
    monkeyNik
        25
    monkeyNik  
       166 天前
    系统、网络相关的去看:《 UNIX 环境高级编程》和《 UNIX 网络编程》
    算法:就算法导论吧
    数据库:直接看对应数据库的 C API
    GUI:不太清楚了,去参考一下其他贴吧

    顺便自荐一下 C 轮子开源项目: https://github.com/Water-Melon/Melon
    araraloren
        26
    araraloren  
       166 天前
    @Canglin You should choose a language base on your business. I don't think you should learn C just because the third-party tools are written in C.
    smallboy19991231
        27
    smallboy19991231  
       166 天前
    @Canglin 深入那本書最後三章就是系統和網路編程和併發編程入門足夠了
    sjkdsfkkfd
        28
    sjkdsfkkfd  
       166 天前
    《 UNIX 环境高级编程》 +1
    《 Object-Oriented Programming With ANSI-C 》,这本可以看看,毕竟大项目即使是 c 语言也还是会有很多面向对象的设计的

    然后你之后工作搞啥你就看看相关的开源项目
    424778940
        29
    424778940  
       165 天前
    不同意楼上某些观点
    嵌入式领域, 针对单片机来讲, 很多就算封装过的也是 c 库, cpp 的并不多
    c 是很底层的语言, 跟文件/网络之类的东西可以做但现在都不会用 c 来写一般, 除非是特定环境需求
    对于 c 语言我的建议是所有语法相关的东西看完就可以了, 针对*inx/win 的 api 没有什么折腾的必要
    楼主做"实时计算"方向具体是什么平台和需求呢? 我所接触到的更多的是 rtos 之类的场景, 比如 freertos 或者 zephyr 之类的, 这类是 c 强需求的场景
    如果只是希望提升一般分时系统下的程序性能, 用 c 实现不一定是最优解
    Canglin
        30
    Canglin  
    OP
       165 天前 via Android
    @424778940 谢谢你,你很专业,但是我不够专业,你说的我没一个接触过,是金融行业,看来我可以学完 C 直接转 CPP/JAVA/Python 了
    ysc3839
        31
    ysc3839  
       165 天前 via Android
    我的建议是别只学 C ,应该学 C++,实际写项目也更推荐 C++
    Canglin
        32
    Canglin  
    OP
       165 天前
    @ysc3839 #31 C++看的我头疼
    LuckyPocketWatch
        33
    LuckyPocketWatch  
       165 天前
    C primer plus 这本书讲的是基本的语法,看完了确实啥都写不了,我知道两条深入的路径

    一条是嵌入式,公司有小组专门做这个,但我不了解,只听他们整天说“烧板子,烧程序”,我每次听见都以为他们要放火。。

    另一条 unix/linux 系统级别开发,相关可以从《 UNIX 环境高级编程》和《 UNIX 网络编程》卷一和卷二看起,这个是 unix/linux 的接口以及开发,不过这个书的难度不是一般的大。。。。比如《 UNIX 环境高级编程》最后的大示例就是将你开发一款数据库。。。请谨慎入行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2669 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 05:04 · PVG 13:04 · LAX 21:04 · JFK 00:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.