【C】常见概念

计算机语言

  1. 计算机语言是人和计算机交流的工具,人们用它控制计算机完成相应操作
  2. 解释型语言在运行时由解释器逐行翻译并执行代码,开发调试方便但效率较低
  3. 编译型语言需通过编译器将源代码编译成机器语言,执行效率高但调试相对复杂
  4. 计算机语言的语句类型:空语句、表达式语句、函数调⽤语句、复合语句、控制语句
  5. 计算机语言排行榜:TIOBE

编译和链接

  1. 编译型计算机语言,需经编译器翻译然后链接器链接成可执行文件才可执行
  2. 编译器编译成的目标文件的后缀在 Linux 下是 .o,在 windows 下是 .obj
  3. 链接库是指运行时库(它是支持程序运行的基本函数集合)或者第三方库
  4. 注释在预处理阶段被等价替换为空白字符(好的注释体现出程序员素质)

test.c 编译器
cl.exe add.c xxx.c test.obj add.obj xxx.obj 链接库 链接器
link.exe 可执行程序
xxx.exe


第一个程序

主函数

  1. 名称为 main 的函数是程序的唯一入口(有且只有一个)
  2. 包含标准库中相关库函数对应的头文件,才可以在链接时找到该库函数
  3. 函数 printf 会将数据写入到 stdout 缓冲区,当缓冲区触发刷新条件时输出
  4. 关键字 return 会将后面的值返回给调用处(具体返回类型取决于函数头)
c 复制代码
#include <stdio.h>
#include <string.h>

// 宏定义判断
#ifdef WIN32
#include <Windows.h>
#endif

/* argc: 命令行参数数量,argv: 参数字符串,envp: 环境变量字符串 */
int main(int argc, char* argv[], char* envp[])
{
// 设置输入输出编码
#ifdef WIN32
    SetConsoleOutputCP(CP_UTF8);
    SetConsoleCP(CP_UTF8);
#endif
	
	// 转义字符效果
    char str[] = "c:\test\130\test.c";
    printf("c:\\test\\130\\test.c\n");
	
	// 计算大小与长度
    printf("len: %zu\n", strlen(str));
    printf("size: %zu\n", sizeof str);
    
    return 0;
}

标准缓冲区

  1. 通用缓冲区刷新条件:主动调用刷新函数、关闭流、程序正常退出
  2. 标准流包括:stdout(行缓冲)、stderr(始终无缓冲)、stdin(行缓冲)
  3. 普通文件流默认全缓冲,标准输入输出流重定向到文件或管道也为全缓冲
  4. 行缓冲与全缓冲在缓冲区满时会刷新,行缓冲遇换行符或联动情况也会刷新
cpp 复制代码
#include <stdio.h>

#ifdef _WIN32
#include <windows.h>
void sleep_sec(int sec)
{
    Sleep(sec * 1000);
}
#else
#include <time.h>
void sleep_sec(int sec)
{
    struct timespec ts = { sec, 0 };
    nanosleep(&ts, NULL);
}
#endif

int main()
{
    // 手动刷新
    printf("fflush");
    fflush(stdout);
    sleep_sec(1000);
    
    // 无缓冲特性
    fprintf(stderr, "Error!");
    sleep_sec(1000);
    
    // 输入联动刷新
    char ch = 0;
    printf("scanf");
    scanf("%c", &ch);
    sleep_sec(1000);
    
    return 0;
}

关键字

  1. 在计算机语言里,关键字(保留字)被编译器预设用于特定语法结构
  2. 九种控制语句形成三种结构:顺序结构、选择结构、循环结构
  3. 相关文档:C keywords
关键字 作用
_Bool 声明布尔变量(C99)
char 声明字符变量
short 修饰整型
int 声明整型变量
float 声明单精度浮点型变量
double 声明双精度浮点型变量
long 修饰数据类型
signed 有符号的修饰
unsigned 无符号的修饰
static 静态的修饰(增局部限全局)
volatile 易变的修饰(阻止编译器优化)
const 常变量修饰
void 表无类型(函数相关)
enum 声明枚举类型
struct 声明结构体
union 声明共用体
auto 自动存储期修饰
register 建议编译器存寄存器
typedef 为已有类型定义别名
if ... if else ... else 依据条件判断执行
switch ... case ... default 依据对应值跳转
for / while 先判断条件再执行
do ... while 先执行再判断条件
break 跳出循环或 switch
continue 直接跳到循环头
goto 跳转到指定标签
inline 建议编译器将函数展开(C99)
return 从函数返回值并退出函数
extern 声明外部标识符(多文件共享)
sizeof 获取所占字节数(平台差异)

字符

  1. 在键盘上敲出的符号是字符,这些字符遵循统一的编码(ASCII 编码)
  2. 字符是用单引号括起来的,字符串(以 '\0' 结尾)是用双引号括起来的
  3. ASCII 码是美国信息交换标准代码(使用 7 位二进制数来表示一个字符)
  4. 在这些字符中 ASCII 码值从 0~31 的是不可打印字符(无法打印观察)
  5. 顺序:数字 -> 大写字母 -> 小写字母
dec 字符 dec 字符 dec 字符 dec 字符 dec 字符
0 NUL (空) 26 SUB 52 4 78 N 104 h
1 SOH (标题开始) 27 ESC 53 5 79 O 105 i
2 STX (正文开始) 28 FS 54 6 80 P 106 j
3 ETX (正文结束) 29 GS 55 7 81 Q 107 k
4 EOT (传送结束) 30 RS 56 8 82 R 108 l
5 ENQ (询问) 31 US 57 9 83 S 109 m
6 ACK (确认) 32 (空格) 58 : 84 T 110 n
7 BEL (响铃) 33 ! 59 ; 85 U 111 o
8 BS (退格) 34 " 60 < 86 V 112 p
9 HT (横向制表) 35 # 61 = 87 W 113 q
10 LF (换行) 36 $ 62 > 88 X 114 r
11 VT (纵向制表) 37 % 63 ? 89 Y 115 s
12 FF (换页) 38 & 64 @ 90 Z 116 t
13 CR (回车) 39 ' 65 A 91 117 u
14 SO (移位输出) 40 ( 66 B 92 \ 118 v
15 SI (移位输入) 41 ) 67 C 93 ] 119 w
16 DLE 42 * 68 D 94 ^ 120 x
17 DC1 43 + 69 E 95 _ 121 y
18 DC2 44 , 70 F 96 122 z
19 DC3 45 - 71 G 97 a 123 {
20 DC4 46 . 72 H 98 b 124 |
21 NAK 47 / 73 I 99 c 125 }
22 SYN 48 0 74 J 100 d 126 ~
23 ETB 49 1 75 K 101 e 127 DEL (删除)
24 CAN 50 2 76 L 102 f
25 EM 51 3 77 M 103 g

转义字符

  1. 转义字符顾名思义:即转变原来意思的字符
  2. 相关文档:Escape sequences
字符 解释
\a​ 警报字符,会触发系统发出提示音或警报信号
\b​ 退格符,将当前光标位置向左移动一字符位置
\f​ 换页符,使打印头移到下页头(输出为清屏或分页)
\n​ 换行符,将光标移到下一行的开头位置
\r​ 回车符,将光标移到当前行的开头位置
\t​ 水平制表符,将光标移到下一个水平制表位
\v​ 垂直制表符,将光标移到下一个垂直制表位
\\​ 反斜杠字符,用于在字符串或字符中表示反斜杠
\'​ 单引号字符,用于在字符常量中表示单引号
\"​ 双引号字符,用于在字符串常量中表示双引号
\?​ 问号字符,避免在书写连续问号时被误解为三字母词(现较少)
\0​ 空字符,在字符串中表示字符串的结束标志
\ooo​ 以 1 - 3 位八进制数表示的任意字符
\xhh​ 以 1 - 2 位十六进制数表示的任意字符

相关推荐
yyy(十一月限定版)3 小时前
C语言——排序算法
c语言·开发语言·排序算法
黎雁·泠崖5 小时前
指针收官篇:sizeof/strlen + 指针运算笔试考点全梳理
c语言·开发语言
lingran__5 小时前
数据在内存中的存储详解(C语言拓展版)
c语言·开发语言
superman超哥5 小时前
仓颉语言中异常处理入门的深度剖析与工程实践
c语言·开发语言·c++·python·仓颉
德福危险6 小时前
C语言数据类型与变量 系统总结笔记
c语言·笔记·算法
若风的雨7 小时前
ARM Trusted Firmware 启动流程:从汇编到 C 语言的渐进式初始化
c语言·汇编·arm开发
疑惑的杰瑞7 小时前
【C】顺序结构
c语言·内存划分
小龙报7 小时前
【初阶数据结构】从 “数组升级” 到工程实现:动态顺序表实现框架的硬核拆解指南
c语言·数据结构·c++·算法·机器学习·信息与通信·visual studio
SELSL7 小时前
Linux文件属性及目录
linux·c语言·linux目录文件·linux文件属性、目录api·linux文件属性