嵌入式C语言部分学习笔记

嵌入式C语言部分学习笔记 C语言C语言是一种过程式编程语言虽然它非常强大但不支持面向对象编程OOP概念面向对象编程是C等语言的特点。C语言支持低级内存操作如指针操作允许开发人员直接访问硬件和内存。与解释型语言相比C语言的程序在运行时更接近机器语言执行速度较快。-o 给生成的文件取别名默认名字叫a.exe/a.out1、C语言的编译预处理器cpp gcc - E作用头文件包含、宏替换、条件编译、去掉注释gcc -Ehello.c -o hello.i1、展开头文件2、删除注释3、替换宏4、宏分支# 预处理符编译器gcc gcc - S将C语言代码变成汇编语言检查语法 .sGCCGNU Compiler CollectionGNU编译器套件是由GNU开发的编程语言编译器。安装后可运用gcc进行编译作用C文件编译为汇编文件gcc -S hello.i -o hello.s汇编器as gcc - c作用汇编文件转换为二进制文件将汇编语言转化为机器码二进制 .objgcc -c hello.s -o hello.o链接器ld gcc将多个目标文件和库文件链接成最终的可执行文件1、将多个二进制文件打包成一个可执行文件2、链接库、链接函数gcc hello.o -o hello.exe链接阶段是发生未定义函数错误的阶段。在链接阶段编译器会将编译后的目标文件与库文件、其他目标文件进行链接。如果存在函数的调用但是没有对应的函数定义或者在链接的文件中找不到定义链接器会报告一个“未定义引用”错误。这时编译器才能检测出是否有未定义的函数。目标文件的扩展名通常是 .obj 或 .o这些文件是由编译器生成的包含机器代码等待链接器处理。2、main()函数main()函数也被称为 主函数是最主要的一个函数需要用 int 提供一个返回值 如果运行错误也可以返回一个其他的值提供给函数main函数返回值可以是void或者是int返回0表示成功 返回1~255表示错误码int main(void) // 无参数形式{printf(hello world!\n);return 0; // 返回值}C语言中的main函数可以写成int main()、int main(void)或int main(int argc, char *argv[])。argc是一个整数表示通过命令行传递给程序的参数数量。包括程序名称在内argc的值总是至少为1。参数可以是void 或 int argc, char const *argv[]命令行参数argc表示传递了几个参数argv表示参数的内容3、头文件作用放在文件的头部来声明函数声明了函数在调用的时候需要符合的格式双引号可以用于自定义的头文件不从标准库中寻找而是从当前自定义目录中.c 源文件 Source file源文件包含程序的主要实现代码是程序的源代码文件.h 头文件 Header file头文件包含函数的声明函数原型、宏定义、结构体定义、全局变量声明、其他需要在多个源文件中共享的内容C语言编译的最小单位所有的源文件避免多次包含同一头文件使用#ifndef和#endif可以避免多次包含同一头文件。在头文件开头使用#ifndef检查一个唯一标识符是否未定义。定义标识符如果未定义使用#define定义该标识符。编写头文件内容放置头文件的实际代码如函数声明、类型定义等。在头文件末尾使用#endif结束条件编译块。示例代码// example.h #ifndef EXAMPLE_H // 检查 EXAMPLE_H 是否未定义 #define EXAMPLE_H // 如果未定义则定义它 // 头文件内容如函数声明、类型定义等 void print_message(void); int add(int a, int b); #endif // 结束条件编译块#pragma once是另一种方式但并非所有编译器都支持。如果头文件中的代码被条件编译指令包裹比如#ifdef如果条件成立和#endif那么只有在条件满足时头文件的内容才会被包含。如果条件不满足头文件中的内容将被预处理器忽略。遭遇问题教材中提到的编译工具文件下载过于缓慢于是直接根据教材附件下载