C 快速指南
C - 快速指南
Section titled “C - 快速指南”C - 语言概述
Section titled “C - 语言概述”C 是一种通用、过程式编程语言,以其效率和低级内存访问而闻名。由 Dennis Ritchie 于 1972 年在贝尔实验室(Bell Labs)为 UNIX 操作系统开发。
由 ANSI(C89)和 ISO 标准化,后续版本如 C99、C11、C17 添加了新功能。
广泛应用于系统编程、嵌入式系统、性能关键型应用和基础软件。
- 高效
- 低级内存访问(指针)
- 结构化(函数)
- 可移植
- 许多其他语言的基础
关于 C 的事实
Section titled “关于 C 的事实”- 为编写 UNIX 而发明。
- B 语言的后继者。
- 由 ANSI(1989 年)和 ISO 标准化。
- Linux、macOS、Windows 内核的核心语言。
- 用于数据库、编译器、游戏引擎等。
C - 环境搭建
Section titled “C - 环境搭建”要编写、编译和运行 C 程序,您需要:(a) 一个文本编辑器 和 (b) 一个 C 编译器。
文本编辑器:
Section titled “文本编辑器:”用于编写源代码(以 .c 结尾的文件)。现代编辑器提供语法高亮、自动补全等功能。
常用选择:Visual Studio Code (VS Code)、Sublime Text、Atom、Vim、Emacs、Notepad++ (Windows)。
源文件包含人类可读的代码。请确保您知道如何以 .c 扩展名保存文件。
C 编译器:
Section titled “C 编译器:”将您的 .c 源文件翻译成机器码(可执行程序),供计算机的 CPU 运行。
常用编译器:
- GCC (GNU Compiler Collection): 自由、开源,广泛适用于 Linux、macOS 和 Windows(通过 MinGW-w64/MSYS2 或 WSL)。支持 C 和 C++。
- Clang: 另一个流行的开源编译器,以编译速度快和诊断信息好而闻名。常与 LLVM 一起使用。
- MSVC (Microsoft Visual C++): Windows 上 Visual Studio 的一部分。编译 C 和 C++。
安装方式因操作系统而异:
Linux:
Section titled “Linux:”使用您发行版的包管理器。检查是否安装了 GCC:
$ gcc --version如果未安装,使用以下命令:
# Debian/Ubuntusudo apt updatesudo apt install build-essential
# Fedora/CentOS/RHELsudo dnf groupinstall "Development Tools"
# Arch Linuxsudo pacman -S base-develmacOS:
Section titled “macOS:”从 App Store 安装 Xcode,或只安装 Command Line Tools。打开终端(Terminal)并运行:
$ xcode-select --install这将提供 GCC(通常是 Clang 的别名)和其他开发工具。
Windows:
Section titled “Windows:”- 推荐:WSL (Windows Subsystem for Linux): 从 Microsoft Store 安装 Linux 发行版(如 Ubuntu)。然后在 WSL 内遵循上面的 Linux 安装步骤。
- MSYS2/MinGW-w64: 提供最新的适用于 Windows 的原生 GCC 工具链。从 https://www.msys2.org/ 下载,遵循其说明安装
mingw-w64-x86_64-toolchain软件包。确保将 MinGW 的 bin 目录(例如,C:\msys64\mingw64\bin)添加到系统的 PATH 环境变量中。 - Visual Studio Community: 从 https://visualstudio.microsoft.com/vs/community/ 下载。安装期间,选择“使用 C++ 的桌面开发”工作负载,其中包含 C 编译器(cl.exe)和构建工具。
C - 程序结构
Section titled “C - 程序结构”让我们看一个最小的 C 程序。
C Hello World 示例
Section titled “C Hello World 示例”一个基本的 C 程序结构包括:
- 预处理指令 (Preprocessor Directives) (例如,
#include) - 函数 (Functions) (至少有
main) - 变量 (Variables) (可选)
- 语句 (Statements) 和 表达式 (Expressions)
- 注释 (Comments)
示例 hello.c:
// 包含标准输入/输出库,用于 printf#include <stdio.h>
// main 函数:程序执行从这里开始int main(void) { /* 多行注释: 这个程序打印 Hello, World! */ printf("Hello, World!\n"); // 调用 printf 函数的语句
return 0; // 表示成功执行}说明:
#include <stdio.h>:一个预处理指令,告诉编译器包含标准输入/输出头文件<stdio.h>的内容,该文件包含了printf的声明。int main(void):主函数,程序执行从这里开始。int表示它返回一个整型状态码;void表示它不接受参数(或者也可以是int main(int argc, char *argv[])用于命令行参数)。// …和/* … */:注释,被编译器忽略,用于解释说明。printf(…):一个标准库函数,用于向控制台输出文本。\n是一个转义序列,表示换行符。return 0;:退出main函数并向操作系统返回 0,通常约定表示成功执行。
编译并执行 C 程序:
Section titled “编译并执行 C 程序:”步骤:
- 将上面的代码保存在名为
hello.c的文件中。 - 打开一个终端(terminal)或命令提示符(command prompt)。
- 导航到保存文件的目录。
- 使用 C 编译器编译代码(例如,GCC):
gcc hello.c -o hello(或clang hello.c -o hello)。-o hello部分指定输出的可执行文件名称。 - 如果没有错误,将创建一个名为
hello(在 Windows 上为hello.exe)的可执行文件。 - 运行程序:
./hello(在 Linux/macOS/WSL 上)或hello.exe(在 Windows 命令提示符上)。
预期输出:
$ gcc hello.c -o hello$ ./helloHello, World!确保编译器(gcc、clang 等)已添加到您的系统 PATH 环境变量中。
C - 基本语法
Section titled “C - 基本语法”理解 C 语法的基本构成要素。
C 中的记号(Tokens)
Section titled “C 中的记号(Tokens)”一个 C 程序由记号组成。记号是程序中最小的独立单元,例如关键字(keywords)、标识符(identifiers)、常量(constants)、字符串字面量(string literals)和符号(symbols)。例如,语句:
printf("Hello, World!\n");构成以下记号:
printf("Hello, World!\n");分号 (;)
Section titled “分号 (;)”在 C 中,分号用作语句终止符。每个独立的语句必须以分号结尾。
两个语句的示例:
printf("Hello!\n");return 0;注释(Comments)
Section titled “注释(Comments)”注释是解释性文本,会被编译器忽略。C 支持两种类型:
/* 这是一个多行注释。 它可以跨越多行。 */
// 这是一个单行注释 (C99 中引入)。它在换行符处结束。注释不能嵌套(在一个 /* … / 块内部再使用 / 通常有问题)。
标识符(Identifiers)
Section titled “标识符(Identifiers)”标识符是用于变量、函数、标签和其他用户自定义项的名称。规则:
- 必须以字母 (a-z, A-Z) 或下划线 (_) 开头。
- 后续字符可以是字母、下划线或数字 (0-9)。
- 不能包含标点符号,如 @、$、%。
- 区分大小写:
myVar和myvar是不同的标识符。 - 不能与 C 关键字相同。
有效标识符示例:
count _temp value1 calculate_sum MAX_ENTRIES关键字(Keywords)
Section titled “关键字(Keywords)”关键字是 C 中具有特殊含义的保留字。它们不能用作标识符。
| 标准关键字 (C11 及更早版本) | |||
|---|---|---|---|
| auto | double | int | struct |
| break | else | long | switch |
| case | enum | register | typedef |
| char | extern | return | union |
| const | float | short | unsigned |
| continue | for | signed | void |
| default | goto | sizeof | volatile |
| do | if | static | while |
| _Bool | _Complex | _Imaginary | inline (C99) |
| restrict (C99) |
注意:以下划线开头的关键字通常是保留的或属于后续标准的一部分。
C 中的空白字符(Whitespace)
Section titled “C 中的空白字符(Whitespace)”空白字符指空格、制表符、换行符和注释。C 编译器在很大程度上忽略空白字符,但它对于分隔记号至关重要。
例如,在 int age; 中,int 和 age 之间的空白字符是必需的。然而,在 result = value1 + value2; 中,等号 = 和加号 + 周围的空白字符是可选的,但可以提高可读性。
int age; // 需要空白字符
fruit=apples+oranges; // 可以工作,但可读性较差fruit = apples + oranges; // 可读性更好空行也会被忽略,可以用于组织代码。