C语言学习笔记
文章平均质量分 50
该课程要求学员学完后,具备非常稳定的C编程能力,能熟练地使用Linux系统,同时对计算机体系结构与指令集、操作系统原理和设备驱动程序都有较深入的了解。
狮子座硅农(Leo ICer)
努力成为卓越的芯片研发人员!
展开
-
C语言中的 |= 意思
按位或的结果为:0x03 等同于0011。C语言中的 |= 意思为:按位或后赋值。原创 2022-10-26 11:36:35 · 8130 阅读 · 0 评论 -
编写可读可维护代码,如何编写好代码
随着项目规模增长, 需要分成多个文件来管理// inst.c # define MSIZE 1024 // BUG: 这里忘了改 assert(PC < MSIZE);512// inst.c # define MSIZE 1024 // BUG: 这里忘了改 assert(PC < MSIZE);1024// inst.c # define MSIZE 1024 // BUG: 这里忘了改 assert(PC < MSIZE);原创 2022-10-10 19:01:45 · 254 阅读 · 0 评论 -
变量不使用int64_t和int8_t?
A: C语言标准规定, 有符号数溢出是undefined behavior, 但无符号数不会溢出。Q: 为什么不使用int64_t和int8_t?原创 2022-10-09 22:02:22 · 102 阅读 · 0 评论 -
C语言:实现定义行为和ABI(语法分析思路很好)
不同编译器对c语言手册未指定的行为,很可能有不同的编译结果。不符合c语言定义行为,但是c标准没有定义,违背标准会出现什么事情。通过定义int8_t;int16_t;int32_t;int64_t;uint8_t;uint16_t;uint32_t;uint64_t;实现参数位宽不变的可移植。通过#include 库实现。原创 2022-10-09 17:59:09 · 353 阅读 · 0 评论 -
从c语言到二进制可执行文件
流程:预处理 -> 编译 -> 汇编 -> 链接 -> 执行预处理 = 文本粘贴工作命令:gcc -E a.c,会产生a.c的预处理文件,发现会把stdio.h(/usr/include/stdio.h)粘贴到预处理文件中。方法: 阅读工具的日志(查看是否支持verbose, log等选项)给出了搜索头文件的顺序:通过man gcc并搜索-I选项可得知头文件搜索的顺序。#define max(a, b) ((a) > (b) ? (a) : (b))预处理阶段只进行文本粘贴, 不求值预处理会去掉a.原创 2022-10-09 16:53:33 · 1992 阅读 · 0 评论 -
C语言中的for(;;)循环
for()是典型的循环结构,然后()里面添加的是循环条件,而for(;)中没有循环条件,所以就是无条件循环,就是只能通过循环体中的内容来跳出循环。原创 2022-09-26 10:14:49 · 3041 阅读 · 0 评论 -
c语言中的“&”符号的用法
例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。双目是需要两个操作数,如 a+b a-b a。三目是需要三个操作数,如 a=c>b?单目是需要一个操作数,如 a++ a--说得简单点就是:逻辑与。原创 2022-09-19 22:40:41 · 7848 阅读 · 0 评论 -
理解二级指针
/2 级指针,保存 guizi2 的地址,guizi2 本身是一个一级指针变量。//1 级指针,保存 guizi1 的地址。二级指针也是一个普通的指针变量,只是它里面保存的值是另外一个一级指针的地址。原创 2022-09-13 10:02:50 · 62 阅读 · 0 评论 -
C语言中 \0 代表什么
c语言中'\0'是字符串的结束符,任何字符串之后都会自动加上'\0'。如果字符串末尾少了‘\0’转义字符,则其在输出时可能会出现乱码问题。这个'\0'是占一个位置的,所以如果一个长度为20的字符串要放在一个字符串数组里面的话,这个字符串数组长度至少为21。“\0”在c语言中代表“字符串结束符”。“\0”的ASCII码为“0”,也就是空字符;因此当把一个字符串存入一个数组时,也把结束符“\0”存入数组,并以此作为该字符串是否结束的标志。'\0' 是字符串的结束符,任何字符串之后都会自动加上'\0'。原创 2022-09-13 09:51:19 · 35833 阅读 · 2 评论 -
3.4 全局变量、局部变量和作用域
我们把函数中定义的变量称为局部变量,由于形参相当于函数中的变量,所以形参也是一种局部变量。“局部”的含义:原创 2022-09-11 21:05:07 · 219 阅读 · 0 评论 -
3.3 形参和实参
下面我们定义一个带参数的函数,我们需要在函数定义中指明参数的个数和每个参数的类型,定义参数就像定义变量一样,需要为每个参数指明类型,参数的命名也要遵循标识符命名规则。原创 2022-09-11 20:33:59 · 154 阅读 · 0 评论 -
1.2 自然语言和形式语言
自然语言(Natural Language)就是人类讲的语言,比如汉语、英语和法语。这类语言不是人为设计(虽然有人试图强加一些规则)而是自然进化的。形式语言(Formal Language)是为了特定应用而人为设计的语言。例如数学家用的数字和运算符号、化学家用的分子式等。编程语言也是一种形式语言,是专门设计用来表达计算过程的形式语言。### 1.2 自然语言和形式语言。原创 2022-09-11 10:15:48 · 224 阅读 · 0 评论 -
C语言学习的前言
该书是为嵌入式linux系统工程师就业班准备的教材。C语言是一门很难的编程语言,不懂编译原理、操作系统和计算机体系结构根本不可能学明白。不是孤立地讲C语言,而是和编译原理、操作系统、计算机体系结构结合起来讲。或者说,本书的内容只是以C语言为载体,真正讲的是计算机的原理和程序的原理。强调基本概念和基本原理,在编排顺序上非常重视概念之间的依赖关系,每次引入一个新的概念,只依赖于前面章节已经讲过的概念,而绝不会依赖后面章节要讲的概念。原创 2022-09-11 10:09:26 · 147 阅读 · 0 评论 -
1.1 程序编程语言
编程语言(Programming Language)分为低级语言(Low-level Language)和高级语言(High-level Language)。机器语言(Machine Language)和汇编语言(Assembly Language)属于低级语言,直接用计算机指令编写程序。而C、C++、Java、Python等属于高级语言,用语句(Statement)编写程序,语句是计算机指令的抽象表示。举个例子,同样一个语句用C语言、汇编语言和机器语言分别表示如下:表 1.1 一个语句的三种表示。原创 2022-09-11 09:54:37 · 135 阅读 · 0 评论