什么是 C Programming Language?

⚡ 智能摘要

C Programming Language C语言是一种通用结构化语言,由贝尔实验室的丹尼斯·里奇于1972年创建。它与机器无关,速度快,是系统软件、操作系统、嵌入式固件以及现代编程语言(如C++)的基础。 C++, Java和 Python.

  • 🧱 先学习基础知识: 在学习指针、结构体和动态内存之前,先掌握头文件、main、printf 和大括号。
  • 🏛️ 了解历史: ALGOL → BCPL → B → C 是其发展脉络;ANSI C 标准于 1989 年最终确定,并于 1990 年获得 ISO 批准。
  • ⚙️ 了解编译过程: 编译器生成目标文件,链接器将它们拼接成一个可在目标机器上运行的可执行文件。
  • 🌍 广泛应用: C 语言为操作系统、数据库、浏览器、嵌入式固件、物联网设备和编译器工具链提供支持。
  • 🤖 将C语言与人工智能工具结合使用: AI 助手可以解释指针错误,建议更安全的函数,并将纯英文请求转换为可编译的 C 代码片段。

C Programming Language

什么是 C Programming Language?

C 是一种通用编程语言,它非常流行、简单易用且灵活。它是一种结构化的、与机器无关的语言,用于编写各种各样的应用程序——从操作系统到…… Windows 以及 Linux 到复杂的程序,例如 Oracle 数据库、Git 和 Python 口译员。

C语言常被誉为现代编程的基石。一旦掌握了C语言,学习其他语言就会变得容易得多,因为大多数语言都借鉴了C语言的概念。对计算机内存的基本了解也很有帮助,因为内存几乎是所有C程序的核心。

C Programming Language

IEEE——2018 年十大编程语言。

本指南将带您了解 C 编程语言的基础知识:它的历史、基本命令、主要应用、为什么它仍然值得学习,以及它的编译模型是如何工作的。

C语言的历史

C语言并非孤立出现,而是由一系列早期系统语言发展而来:

  • ALGOL(1960): ALGOL常被誉为编程语言之父。它将结构化编程引入了更广泛的开发者群体,并在欧洲各大学中得到广泛应用。
  • BCPL(1967): Basic 组合编程语言,由 Martin Richards 设计,用于编写系统软件。
  • B(1970): 由AT&T贝尔实验室的肯·汤普森引入。B继承了BCPL的许多特性,并被用于编写早期的UNIX工具。

C 语言的历史

In 1972丹尼斯·里奇创作 C 在贝尔实验室,C 语言汲取了 ALGOL、BCPL 和 B 语言的精华,并添加了新的概念,使其比之前的任何语言都更具表现力。

C语言与UNIX操作系统紧密相关——UNIX操作系统本身的大部分代码都是用C语言重写的。随着C语言在贝尔实验室之外的传播,出现了适用于多种平台的商业编译器,C语言也演变成了多种互不兼容的方言。为了恢复语言的一致性,美国国家标准协会(ANSI)发布了C语言标准。 1989国际标准化组织(ISO)于1999年批准了该标准。 1990标准化版本通常被称为 美标C.

C 语言的历史

C的历史

语言如 C++ 和 Java 许多现代语言直接源自 C 语言,并沿用了 C 语言的语法和约定。因此,C 语言构成了当今大部分软件的基础。

C 基本命令

以下命令构成了几乎所有 C 程序的框架。

C 基本命令 说明
#include <stdio.h> 编译前包含 C 库中的标准输入输出头文件。
int main() 主函数——所有 C 程序的执行都从这里开始。
{ 标志着主功能块的开始。
/* some_comments */ 一条注释。编译器会忽略两者之间的所有内容。 /**/.
printf("Hello, World!"); 将输出打印到屏幕上。
getch(); 从键盘读取单个字符(非标准,主要用于 Turbo C)。
return 0; 终止主函数并向操作系统返回值 0。
} 标志着主功能块的结束。

C语言的应用场景有哪些?主要应用

C 语言运行在大多数用户看不到的地方,但它的资源占用却非常庞大。常见应用领域包括:

  1. 嵌入式系统和微控制器固件。
  2. 系统级应用程序和驱动程序。
  3. 桌面应用程序,包括许多 Adob​​e 产品。
  4. 网络浏览器及其扩展程序—— Google铬含有大量的C/C++ 码。
  5. 数据库—— MySQL 是用 C 语言编写的最流行的数据库之一。
  6. Operating 系统——苹果公司的 macOS (达尔文) Microsoft WindowsLinux,以及历史上的塞班(Symbian),都是用 C 语言编写的。
  7. 编译器、语言运行时和解释器。
  8. 物联网 (IoT) 设备和家庭自动化固件。

为什么要学习C语言?

C语言是许多编程语言的基础,因此学习C语言会让后续学习任何语言都更容易。它引入了你将在其他语言中看到的相同数据类型、运算符和控制语句。 C++, Java, Python,然后出发。

投资C类股票的主要原因有:

  • 速度: C 语言编译成本地代码,并能让你对内存进行细粒度控制。
  • 可移植性: 用 C 语言编写的程序几乎可以在任何平台上重新编译和运行。
  • 结构体: C 程序被分成多个模块,这使得测试、维护和调试更加容易。
  • 紧凑型核心: C 语言只有 32 个关键字、几种数据类型和一个强大的内置库。
  • 可扩展性: 你可以向库中添加自己的函数,并像调用内置函数一样调用它们。
  • 职业价值: 嵌入式、内核和高性能应用领域仍然需要扎实的 C 语言技能。

创新中心 C Programming Language 方式

C 语言是一种编译型语言。编译器读取源代码,生成机器可以理解的目标文件。链接器随后将一个或多个目标文件(以及你引用的任何库)组合成一个可在目标平台上运行的可执行文件。下图展示了完整的执行流程。

创新中心 C Programming Language 方式

市面上有许多编译器——包括在线编译器和离线编译器——它们都遵循相同的流程。常用的编译器包括:

  • GCC — GNU 编译器集合,是 Linux 和许多嵌入式目标的实际标准。
  • — 基于 LLVM 的前端,默认使用 macOS.
  • MinGW的 — 极简 GNU for Windows,将 GCC 带到 Windows 用户。
  • 可移植 C 编译器 (pcc)。
  • Turbo C. — 经典的编译器,至今仍被许多学术课程所使用。

C的优点和缺点

下表总结了在为新项目选择 C ​​之前应该权衡的各种利弊。

优势 缺点
快速、底层地访问内存和硬件。 手动内存管理容易导致内存泄漏和缓冲区溢出等错误。
可跨架构和操作系统移植。 没有内置的面向对象或泛型。
语法简洁,仅使用 32 个关键字。 没有内置安全机制——未定义行为可能导致系统静默崩溃。
庞大的编译器、调试器和库生态系统。 与脚本语言相比,对于高级应用程序代码而言,其代码过于冗长。
Foundation 对于现代语言而言——技能很容易迁移。 对于使用托管语言即可满足需求的任务,生产力会降低。

编写 C 语言代码的最佳实践

以下习惯能使 C 代码库保持可读性、可移植性,并避免常见的内存错误:

  • 启用警告: 编译 -Wall -Wextra -Werror 因此,一些细微的问题会导致构建失败。
  • 初始化变量: 永远不要读取未赋值的变量。
  • 检查返回值: malloc文件 I/O 和系统调用都会通过返回码发出错误信号。
  • 每对 mallocfree: 使用静态分析或 AddressSanitizer 来捕获泄漏。
  • 优先选择更安全的字符串函数: 使用 snprintf 而不是 sprintfstrncpy 小心。
  • 使用头部保护: 使用以下方式保护每个标头 #ifndef / #define / #endif 守护。
  • 遵循标准: 除非有充分的理由使用编译器扩展,否则请编写可移植的 ANSI/C99/C11 代码。

常见问题

丹尼斯·里奇于 1972 年在贝尔实验室创建了 C 语言。他借鉴了 ALGOL、BCPL 和 B 语言的思想,并使用 C 语言重写了 AT&T 的 UNIX 操作系统的大部分内容。

C 语言是一种以函数和结构化编程为中心的程序化语言。 C++ 添加了面向对象、类、模板和标准模板库,同时保留了ping C语言的大部分语法。

C语言通常被称为中级语言。它既足够高级,可读性强,可移植性高,又足够低级,可以通过指针直接操作内存地址和硬件寄存器。

ANSI C 定义了 32 个保留关键字。 Later C99 和 C11 等标准又增加了一些,包括 inline, _Bool_Static_assert但核心部分仍然很小且稳定。

ANSI C 是美国国家标准协会于 1989 年制定的 C 语言标准版本,并于 1990 年由 ISO 批准。它定义了可移植的语法、标准库和编译器行为。

是的。C 语言仍然是操作系统、嵌入式固件、数据库、语言运行时和高性能库的底层驱动力。许多人工智能和物联网工具链也依赖 C 语言来实现速度和可移植性。

AI助手可以用通俗易懂的语言解释编译器错误,并针对风险函数提出更安全的替代方案,例如 gets并通过实例引导初学者理解指针和内存的概念。

是的。人工智能代码助手可以将诸如“读取 CSV 文件并对第二列求和”之类的简单英语请求转换为可运行的 C 程序,并解释每个函数,以便初学者在运行之前进行了解。

总结一下这篇文章: