31
2014
07

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

预处理:也就是包含需要的头文件,用#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");//字符数组赋值




版权声明:
作者:真爱无限 出处:http://www.pukuimin.top 本文为博主原创文章版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接.
« 上一篇下一篇 »

相关文章:

评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。