标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用
2023-09-27 14:29:33 时间
预处理:也就是包含需要的头文件,用#include或#include 自定义的头文件
宏定义,如:#define PI 3.1415926
查看用宏定义的值替换宏名称,如:gcc -E test.
预处理:也就是包含需要的头文件,用#include 标准头文件 或#include "自定义的头文件"
宏定义,如:#define PI 3.1415926
查看用宏定义的值替换宏名称,如:gcc -E test.c
带参数的宏:MAX(x,y) (x) (y)?((x):(y)) //使用方法与函数一样
宏运算:
#define PRINT(n) printf(#n"=%d",n) //#n 就是把传入的变量值作为字符串放在那里
#define MAX(type) type max_##type() //##n就是把变量的值作为函数名的一部分
#define MKID(n) i_##n //##n就是把变量的值作为变量名的一部分
C语言中预定义的宏:
_LINE_ 当前正在编译的行号:%d
_FILE_ 正在编译的源程序名:%s
_DATE_ 编译程序的日期:%s
_TIME_ 编译程序的时间:%s
_STDC_ 判断编译器是否符合c标准,返回0或1:%d
条件编译:
#define TEST 1
#if TEST
//TEST为真时执行的代码
#endif
#ifndef ABC_H //如果没定义,就定义宏
#define ABC_H
//头文件定义
#endif
#ifdef ABC_H //如果定义了宏,取消定义
#undef ABC_H
#endif
判断: if defined(TEST) !defined(ABC_H){ }
if……else……语法:#if …… #elif……#elif……#else……#endif
编译时,参数 -D 可随时定义宏。
声明使用外部变量的方法:exterm int speed;//speed为外部变量名
编写makefile文件批量编译的语法,示例:
main:main.o test.o test.h //冒号前台的是生成的目标,后面的是依赖的文件
gcc main.o test.o -o main //编译的具体语句
main.o:main.c
gcc -c main.c
test.o:test.c
gcc -c test.c
clean:
rm *.o
使用方法 ,可以使用make 编译全部,也可使用make main.o 生成 main.o,使用make test.o 生成 test.o ,make clean 删除编译生成的.o文件。
结构体长度计算示例(自动补齐):
总长度为最长数据类型字节的整数倍。
struct student//总长28,是4的整数倍,所以最终大小为28字节
{
int ID;//4字节
char name[20];//数组 ,每个字符1字节,共20字节
int age;//4字节
};
typedef struct//总长18字节,要是4的整数倍,大于10且是4的整数倍的数是20,所以最终大小为20字节
{
int ID;//4字节
char name[10];//数组 ,每个字符1字节,共10字节
int age;//4字节
}student;
结构体变量的定义和使用:
struct student s; 或 struct student s={101,"zs",20};//定义时整体赋值
s.ID=101;//单个赋值
strcpy(s.name,"zs");//字符数组赋值
C语言 第八章 函数、指针与宏 一、函数 函数是一个包含完成一定功能的执行代码段。我们可以把函数看成一个 黑盒子 , 你只要将数据送进去就能得到结果, 而函数内部究竟是如何工作的的, 外部程序是不知道的。外部程序所知道的仅限于输入给函数什么以及函数输出什么。
预处理:也就是包含需要的头文件,用#include 标准头文件 或#include "自定义的头文件"
宏定义,如:#define PI 3.1415926
查看用宏定义的值替换宏名称,如:gcc -E test.c
带参数的宏:MAX(x,y) (x) (y)?((x):(y)) //使用方法与函数一样
宏运算:
#define PRINT(n) printf(#n"=%d",n) //#n 就是把传入的变量值作为字符串放在那里
#define MAX(type) type max_##type() //##n就是把变量的值作为函数名的一部分
#define MKID(n) i_##n //##n就是把变量的值作为变量名的一部分
C语言中预定义的宏:
_LINE_ 当前正在编译的行号:%d
_FILE_ 正在编译的源程序名:%s
_DATE_ 编译程序的日期:%s
_TIME_ 编译程序的时间:%s
_STDC_ 判断编译器是否符合c标准,返回0或1:%d
条件编译:
#define TEST 1
#if TEST
//TEST为真时执行的代码
#endif
#ifndef ABC_H //如果没定义,就定义宏
#define ABC_H
//头文件定义
#endif
#ifdef ABC_H //如果定义了宏,取消定义
#undef ABC_H
#endif
判断: if defined(TEST) !defined(ABC_H){ }
if……else……语法:#if …… #elif……#elif……#else……#endif
编译时,参数 -D 可随时定义宏。
声明使用外部变量的方法:exterm int speed;//speed为外部变量名
编写makefile文件批量编译的语法,示例:
main:main.o test.o test.h //冒号前台的是生成的目标,后面的是依赖的文件
gcc main.o test.o -o main //编译的具体语句
main.o:main.c
gcc -c main.c
test.o:test.c
gcc -c test.c
clean:
rm *.o
使用方法 ,可以使用make 编译全部,也可使用make main.o 生成 main.o,使用make test.o 生成 test.o ,make clean 删除编译生成的.o文件。
结构体长度计算示例(自动补齐):
总长度为最长数据类型字节的整数倍。
struct student//总长28,是4的整数倍,所以最终大小为28字节
{
int ID;//4字节
char name[20];//数组 ,每个字符1字节,共20字节
int age;//4字节
};
typedef struct//总长18字节,要是4的整数倍,大于10且是4的整数倍的数是20,所以最终大小为20字节
{
int ID;//4字节
char name[10];//数组 ,每个字符1字节,共10字节
int age;//4字节
}student;
结构体变量的定义和使用:
struct student s; 或 struct student s={101,"zs",20};//定义时整体赋值
s.ID=101;//单个赋值
strcpy(s.name,"zs");//字符数组赋值
C语言 第八章 函数、指针与宏 一、函数 函数是一个包含完成一定功能的执行代码段。我们可以把函数看成一个 黑盒子 , 你只要将数据送进去就能得到结果, 而函数内部究竟是如何工作的的, 外部程序是不知道的。外部程序所知道的仅限于输入给函数什么以及函数输出什么。
相关文章
- 尚硅谷Vue脚手架(天禹老师主讲)的笔记
- Spring Cloud 学习笔记06-02----用Hystrix来限流以及进行服务隔离
- 【ROS学习笔记】12.参数的使用与编程方法
- 【ROS学习笔记】6.发布者Publisher的编程实现(C++和Python)
- [轻笔记]Juliav0.6配置jupyter
- Java学习笔记之常用API String类 StringBuilder类
- linux笔记_day11_shell编程
- 简单脱壳教程笔记(9) --- 手脱TELock0.98b1壳
- 白日梦的ES笔记三:万字长文 Elasticsearch基础概念统一扫盲(二)
- 【Java笔记】网络编程
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_通过ILDasm.exe查看编译器如何将类型及其成员编译成元数据
- Boost::filesystem 使用小笔记
- 图像编程学习笔记2——bmp位图平移
- 【重学前端】专栏 44 篇学习笔记合集(完结)
- Android udp编程笔记 1
- IOS学习之斯坦福大学IOS开发课程笔记(第二课)
- C语言学习笔记——strlen与sizeof的使用注意事项
- 有关虚拟内存的笔记
- Android 经典笔记之八:网络请求数据基础介绍
- C++windows内核编程笔记day14 其他线程同步技术
- C++windows内核编程笔记day13 进程、线程与信号量
- c++windows内核编程笔记day12 硬盘逻辑分区管理、文件管理、内存管理