预处理:也就是包括须要的头文件,用#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编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用的更多相关文章

  1. Linux中的两个经典宏定义:获取结构体成员地址,根据成员地址获得结构体地址;Linux中双向链表的经典实现。

    倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of 这两个宏应该不陌生.这两个宏最初是极客写出的,后来在Linux内核中被推广使用. 1. offse ...

  2. C/C++编程笔记:C语言对齐问题【结构体、栈内存以及位域对齐】

    引言 考虑下面的结构体定义: 假设这个结构体的成员在内存中是紧凑排列的,且c1的起始地址是0,则s的地址就是1,c2的地址是3,i的地址是4. 现在,我们编写一个简单的程序: 运行后输出: 为什么会这 ...

  3. C基础:关于预处理宏定义命令

    为了程序的通用性,可以使用#define预处理宏定义命令,它的具体作用,就是方便程序段的定义和修改. 1.关于预定义替代 #define Conn(x,y) x##y#define ToChar(x) ...

  4. C/C++编程笔记:C++入门知识丨从结构到类的演变

    先来看看本节知识的结构图吧! 接下来我们就逐步来看一下所有的知识点: 结构的演化 C++中的类是从结构演变而来的, 所以我们可以称C++为”带类的C”. 结构发生质的演变 C++结构中可以定义函数, ...

  5. 【Unity Shaders】学习笔记——SurfaceShader(二)两个结构体和CG类型

    [Unity Shaders]学习笔记——SurfaceShader(二)两个结构体和CG类型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5596698. ...

  6. Swift学习笔记(10):类和结构体

    目录: 基本 属性 方法 下标 继承 基本 使用class和struct关键字定义类和结构体. ・类是引用类型,结构体和枚举是值类型 ・值类型被赋予给一个变量.常量或被传递给一个函数时,已值拷贝方式传 ...

  7. 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明

    [VS开发][编程开发][C/C++开发]结构体中的数组与指针的内存分配情况说明 标签:[VS开发] [编程开发] 主要是疑惑在结构体定义的数组的内存空间与指针动态分配的内存空间,在地址上连续性.以及 ...

  8. 《从零开始学Swift》学习笔记(Day 25)——类和结构体定义

    原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { ...

  9. C语言笔记 08_函数指针&回调函数&字符串&结构体&位域

    函数指针 函数指针是指向函数的指针变量. 通常我们说的指针变量是指向一个整型.字符型或数组等变量,而函数指针是指向函数. 函数指针可以像一般函数一样,用于调用函数.传递参数. 函数指针变量的声明: / ...

随机推荐

  1. mysql函数总结

    MySQL函数 MySQL数据库提供了很多函数包括: 数学函数:字符串函数:日期和时间函数:条件判断函数:系统信息函数:加密函数:格式化函数: 一.数学函数 数学函数主要用于处理数字,包括整型.浮点数 ...

  2. Python从文件中读取数据

    一.读取整个文件内容 在读取文件之前,我们先创建一个文本文件resource.txt作为源文件. resource.txt my name is joker, I am 18 years old, H ...

  3. 阀值化 threshold

    OpenCV中的阈值(threshold)函数: threshold 的运用. C++: double threshold(InputArray src, OutputArray dst, doubl ...

  4. nw335 debian sid x86-64 -- 5 使用xp的驱动

    nw335 debian sid x86-64 -- 5 使用xp的驱动

  5. checkStyle使用手册

    1. Annotations(注解:5个) Annotation Use Style(注解使用风格) 这项检查可以控制要使用的注解的样式. Missing Deprecated(缺少deprecad) ...

  6. Wp 导航到手机定位设置页面

    WP开放了很多选择器和启动器,找了半天没发现有打开定位设置页面的,找了好久终于找到了解决办法: await Windows.System.Launcher.LaunchUriAsync(new Uri ...

  7. 2017年 湘潭邀请赛(湖南)or 江苏省赛

    这套题是叉姐出的,好难啊,先扫一遍好像没有会做的题了,仔细一想好像D最容易哎 Super Resolution Accepted : 112   Submit : 178 Time Limit : 1 ...

  8. JS 调用存储过程传递参数

    引用 #region 程序集 Newtonsoft.Json.dll, v4.5.0.0 // E:\Newtonsoft.Json.dll #endregion public DataTable R ...

  9. BZOJ 3601 一个人的数论 ——莫比乌斯反演 高斯消元

    http://www.cnblogs.com/jianglangcaijin/p/4033399.html ——lych_cys 我还是太菜了,考虑一个函数的值得时候,首先考虑是否积性函数,不行的话就 ...

  10. BZOJ 4568 [Scoi2016]幸运数字 ——线性基 倍增

    [题目分析] 考虑异或的最大值,维护线性基就可以了. 但是有多次的询问,树剖或者倍增都可以. 想了想树剖动辄数百行的代码. 算了,我还是写倍增吧. 注:被位运算和大于号的优先级坑了一次,QaQ [代码 ...