C语言条件编译与多平台支持完全指南
条件编译是C语言预处理的核心功能,详解宏定义、跨平台开发技巧与条件分支管理。
阅读全文 →围绕 C 语言核心知识,覆盖从入门到工程实战
变量、运算符、控制结构、函数、作用域、存储类别等核心语法点。
指针运算、数组与指针、动态分配、内存泄漏排查与常见陷阱。
链表、栈、队列、二叉树、哈希表的 C 实现与典型应用。
排序、查找、递归、动态规划、图论的 C 代码模板与解析。
文件 I/O、进程、线程、信号、Socket 网络编程入门。
Makefile、GDB 调试、Valgrind 内存检测、单元测试与代码规范。
每周更新 C 语言干货,从语法细节到工程实践
条件编译是C语言预处理的核心功能,详解宏定义、跨平台开发技巧与条件分支管理。
阅读全文 →详解Google Test、Cmocka与自研测试框架,构建完善的C语言单元测试体系。
阅读全文 →从printf调试到GDB高级技巧,从Valgrind内存检测到core dump分析,全面提升你的C语言调试能力。
阅读全文 →详解printf、scanf、malloc、free、memcpy、memset等常用标准库函数的原理、使用技巧与常见陷阱。
阅读全文 →字符串处理、文件操作、内存管理、时间处理等常用代码模板,开箱即用,适合日常开发参考。
阅读全文 →指针、内存、数组、函数、结构体等核心概念一页速查,适合面试复习与日常开发参考。
阅读全文 →详解可重入函数的概念、信号处理中的安全问题与异步信号安全设计,助你编写安全的信号处理代码。
阅读全文 →详解stdatomic、内存顺序、锁-free数据结构设计与性能优化,助你掌握高效并发编程技能。
阅读全文 →详解errno、perror、assert、错误码设计与GDB远程调试技能,帮助你编写更可靠的C程序。
阅读全文 →详解时间获取、格式化、定时器与clock_gettime高精度计时,助你掌握时间处理技能。
阅读全文 →分阶段循序渐进,每个阶段都有明确目标
变量类型、流程控制、函数与数组,写出 100 行可运行的小程序。
吃透指针、数组、字符串与多级指针,能独立完成动态数据结构。
用 C 手写链表、栈、队列、二叉树并配合 LeetCode 练习。
Linux 下学习文件、进程、线程、Socket,编写 mini-Shell、HTTP 服务。
实现内存池、命令行工具、JSON 解析器或简易数据库。
掌握 GDB、Valgrind、性能分析与工业级编码规范。
经典「Hello World」与单链表节点定义
/* 经典入门 + 单链表节点 */ #include <stdio.h> #include <stdlib.h> typedef struct Node { int val; struct Node *next; } Node; int main(void) { Node *head = malloc(sizeof(Node)); head->val = 42; head->next = NULL; printf("Hello, ohc.cc! value=%d\n", head->val); free(head); return 0; }
对比 3 组典型代码,避开 C 语言常见陷阱
int *get_val(void) { int x = 10; return &x; /* x 在栈上,返回后失效 */ }
int *get_val(void) { int *p = malloc(sizeof(int)); *p = 10; return p; /* 调用方负责 free */ }
char *s = malloc(256); strcpy(s, "hello"); /* s 可能为 NULL */
char *s = malloc(256); if (!s) return NULL; strcpy(s, "hello");
int *arr = malloc(10 * sizeof(arr)); /* sizeof(arr) = sizeof(int*) */
int *arr = malloc(10 * sizeof(*arr)); /* 或 sizeof(int),与类型解耦 */
经典书籍与在线练习
Brian Kernighan & Dennis Ritchie 经典之作,简称 K&R,必读。
Kenneth Reek 著,系统讲解指针与内存模型,进阶首选。
Peter van der Linden 著,揭示 C 语言中的陷阱与高级技巧。
使用 C 完成算法练习,巩固指针与数据结构应用。
游双著,系统讲解 Linux 网络编程与服务器开发。
C / C++ 标准库官方权威文档,遇到 API 不清楚先查这里。