标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用

简介: 预处理:也就是包含需要的头文件,用#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");//字符数组赋值
相关文章
|
1月前
|
编译器 Linux C语言
预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)
预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)
|
30天前
|
算法 C++ 开发者
【C/C++ 基础】条件编译相关的预编译指令
【C/C++ 基础】条件编译相关的预编译指令
21 0
|
3月前
|
存储 缓存 Linux
C语言编译过程——预处理、编译汇编和链接详解
C语言编译过程——预处理、编译汇编和链接详解
|
6月前
|
存储 自然语言处理 编译器
程序编译和链接的过程/预处理符号和用法【C语言】
程序编译和链接的过程/预处理符号和用法【C语言】
45 0
|
6月前
|
编译器 C语言
C语言之#define以及预处理详讲解
C语言之#define以及预处理详讲解
39 0
|
10月前
|
编译器 Linux C语言
C语言 | 预处理知识详解 #预处理指令有哪些?他们如何使用?宏和函数有哪些区别?...#
C语言 | 预处理知识详解 #预处理指令有哪些?他们如何使用?宏和函数有哪些区别?...#
|
11月前
|
编译器 C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
|
11月前
|
C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
|
11月前
|
存储 自然语言处理 程序员
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
|
存储 C语言
C语言-程序预处理、编译、链接详解(二)
C语言-程序预处理、编译、链接详解
124 0
C语言-程序预处理、编译、链接详解(二)