标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用
宏定义,如:#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");//字符数组赋值
转载于:https://www.cnblogs.com/clnchanpin/p/7191489.html
标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用相关推荐
- c语言如何宏定义枚举型结构体,C语言学习笔记--枚举结构体
枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明: enum 枚举类型名字 {名字0,名字1,...,名字n}: 枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为 ...
- 枚举(enum)、宏定义(#define)、结构体(struct)的拾遗
1.宏定义 1.1.不带参数的宏定义 #define 标识符 字符串 例如:#define PI 3.1415926 说明: (1)宏名一般习惯用大写字母表示,但并非规定,也可以用 ...
- Linux中的两个经典宏定义:获取结构体成员地址,根据成员地址获得结构体地址;Linux中双向链表的经典实现。...
倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of 这两个宏应该不陌生.这两个宏最初是极客写出的,后来在Linux内核中被推广使用. 1. offse ...
- 【C语言笔记】【宏定义系列】 向下舍入到指定数值的倍数
[C语言笔记][宏定义系列] 向下舍入到指定数值的倍数 宏定义系列内容.用于记录各式各样有用或者没用的宏定义☺. 宏定义说明 用于将一个数向下舍入到小于等于该数的指定数值的倍数. 例如一个要向下舍入的 ...
- 【C语言笔记】【宏定义系列】 向上取整到指定数值的倍数
[C语言笔记][宏定义系列] 向上取整到指定数值的倍数 宏定义系列内容.用于记录各式各样有用或者没用的宏定义☺. 宏定义说明 用于将一个数向上取整到大于等于该数的指定数值的倍数. 例如一个要向上取整的 ...
- c语言有参构造函数和无参构,C/C++编程笔记:C++入门知识丨从结构到类的演变
先来看看本节知识的结构图吧! 接下来我们就逐步来看一下所有的知识点: 结构的演化 C++中的类是从结构演变而来的, 所以我们可以称C++为"带类的C". 结构发生质的演变 C++结 ...
- 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明...
[VS开发][编程开发][C/C++开发]结构体中的数组与指针的内存分配情况说明 标签:[VS开发] [编程开发] 主要是疑惑在结构体定义的数组的内存空间与指针动态分配的内存空间,在地址上连续性.以及 ...
- 【C 语言】结构体 ( 结构体类型变量初始化 | 定义变量时进行初始化 | 定义隐式结构体时声明变量并初始化 | 定义普通结构体时声明变量并初始化 )
文章目录 一.结构体类型变量初始化 1.定义变量时进行初始化 2.定义普通结构体时声明变量并初始化 3.定义隐式结构体时声明变量并初始化 二.完整代码示例 一.结构体类型变量初始化 1.定义变量时进行 ...
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题? 问题1:结构体指针最开始怎么分配内存?用sizeof()是不能确定大小的. 问题2:给结构体变量分配之后,是否还要 ...
最新文章
- cve-2019-1821 思科 Cisco Prime 企业局域网管理器 远程代码执行 漏洞分析
- python合并两个数据框_python 学习的第五天 数据框合并
- c语言学习与应用 北京邮电大学出版社,《C语言程序设计与应用》低价购书_计算机与互联网_孔网...
- Good Bye 2021: 2022 is NEAR A-Integer Diversity(水题)
- linux 安装源码网卡包,【linux命令】Linux通过yum 或者源码编译安装vnstat查看网卡流量...
- 利用 Chrome 原生功能截图网页全图
- 软件测试 | APP测试 —— Appium 自动化测试框架的初识与学习要领
- nuget下载太慢的问题解决方案 多次尝试下载该 nupkg 均已失败解决方案
- matlab中度数化成度分秒,度分秒转换:32.68度用度、分、秒表示=? 求解释!?请帮忙...
- jmeter使用不同数据进行post请求测试:csv配置使用
- 两行Python代码实现视频负片特效
- 【人工智能项目】LSTM实现数据预测分类实验
- 微信小程序如何做触底加载分页功能
- elasticsearch nested嵌套查询
- LINUX IIO子系统分析之四 IIO EVENT介绍
- 支付宝给微信好友转账!转了?好像又没转
- Linux DDos防御
- initiator、target、lun之间的映射
- Python django 会议室管理系统
- 年薪50W京东软件测试工程师的成长路 —— 我们都曾一样迷茫