黑马程序员_C语言_预处理指令

一.宏定义

 程序运行步骤 : 源文件-->预处理-->汇编-->二进制-->链接(可执行文件)-->运行

 

 1.宏定义

 2.条件编译

 3.文件包含

 所有的预处理指令都是#开头

 

 没有参数的宏定义的基本格式:

 #define 宏名


 宏定义的注意点:1.宏名和值之间一定要空格隔开 2.宏定义后面不要写分号 3.宏写在“”里面就不会替换

 宏定义的规范:宏名要大写,kCount CONUT

 宏定义是在代码翻译成01之前,把所有的宏名替换成后面的值


 宏定义的作用域:默认从定义那行开始,一直到文件的结束.

              * 可以手动的提前结束宏定义的作用范围 #undef

 

  宏定义可以写在代码的任何位置, 跟注释一样


例如:

#define COUNT 6


int main()

{

  

    int array[COUNT] = {1, 3, 4, 6};


    for (int i = 0; i < COUNT; i++) {

        printf("array[%d] = %d\n", i, array[i]);

    }

    return 0;

}


一.2.带参数的宏定义


#define SUM(v1, v2) ((v1)+(v2))

#define PF(v) ((v)*(v))


*  注意

 1.()里面的参数不需要写参数类型

 2.()和后面的替换的格式之间一定要有空格


带参数的宏和无参数的宏的区别

 1.宏定义不会进行计算,你传给他什么,它就会替换成什么

 2.带参数的宏效率比函数高一些,简单的运算,就用宏。复杂的用函数

 3. 只是做一个简单的替换,不会运算


//定义一个宏,求三个数的最大值

#define MAX_VALUE(A,B,C) (A>B?A:B)>C?(A>B?A:B):C


//写一个带参数的宏,实现两个整数之间的交换

#define SWAP(a,b) {int c; c = a; a = b; b = c;}


//定义一个判断一个正数是否是偶数

#define TRUE 1

#define FALSE 0

#define EVEN(x) (((x)%2) == 0)?TRUE:FALSE


//定义一个宏,输出整型 浮点型

#define INTEGER(n) printf("%d\n", n)



二.static和extern对函数的作用


 函数分为两种:

 

1.外部函数:

 特点:定义的函数能被本文件和其它文件访问

 >默认情况下,所有的函数都是外部函数,本文件和其它文件都能访问(调用)

 >extern是完整的定义或者声明一个函数 

 >注意点:所有的外部函数不能重名

 

2.内部函数:

 特点:定义的函数,只能在本文件访问

 >内部函数在不同的文件中可以重名


 extern对函数的作用:

 1.完整的定义一个外部函数

 2.完整的声明一个外部函数

 

 static对函数的作用:

 1.定义一个内部函数

 2.声明一个内部函数(废物)


二.static和extern对变量的作用


"全局"变量分为两种:

 

外部变量:

 特点:能在本文件和其他文件中访问,所有的同名外部变量都是使用同一块内存空间 (只有一个)

 默认的情况下所有的全局变量都是外部变量

 

 

内部变量:

 定义一个内部变量 static 只能文件内部使用,别的文件访问不了。

 注意:两个文件里,可以有重名的内部变量,但是互不影响

 static int value;

 

 extern 修饰全局变量,不是外部变量的意思,它是声明一个外部变量(类似函数声明),这个很特殊

 

 static对变量的作用:

    定义一个内部变量

 extern对变量的作用:

    声明一个外部变量


 extern 只用来修饰全局变量

 

 static 修饰局部变量的时候,会延长局部变量的生命周期

 

 使用场景:如果一个变量调用的频率相当高,而且这个变量是一个固定不变的值,就可以用static来修饰。提高性能


三.typedef


typedef 就是用来对 数据类型 取外号

 

typedef的基本格式:

typedef 原类型名字 外号(新类型名称)

 

typedef 可以给原有的数据类型取外号,也可以给新的外号取外号


举例:

typedef int MyInt;


int main()

{

    MyInt a = 15;

    printf("%s\n",a);

    return 0;

}


*  注意点:如果通过typedef给指向函数的指针取别名,指针的名称就是别名

typedef int * Mypoint


typedef - 结构体

1.第一种方式,先定义结构提类型,再通过结构体类型名称取外号(新的数据类型)

    struct Person

    {

        int age;

        char * name;

    };

    

    typedef struct Person StrPerson;

StrPerson p = {44, "lee"};


2. 第二种方式,定义结构体类型和取外号 同时进行

    typedef struct Person2

    {

        int age2;

        char * name2;

    } StrPerson2;

    

    StrPerson2 p3 = {23, "tt"};


3.第三种方式, 对没有结构体类型名称的数据类型,取外号

    typedef struct

    {

        int age;

        int no;

    } StrPerson3;


typedef - 枚举:


1.先定义一个枚举类型,再通过枚举类型名称来定义一个新的数据类型

    enum Sex

    {

        kSexMan,

        kSexWomen,

        kSexYao

    };

    typedef enum Sex MySex;


2.在定义枚举类型的同时,取外号

    typedef enum Sex2

    {

        kSexMan2,

        kSexWomen2,

        kSexYao2

    } MySex2;


3.对省略枚举类型名称的枚举,取外号

    typedef enum

    {

        kSexMan3,

        kSexWomen3,

        kSexYao3

    } MySex3;


* 和用typedef定义结构体很像


typedef - 指向结构体的指针:


    struct Student

    {

        int age;

        char *name;

    };


1.首先定义一个结构体类型,然后给指向结构体的指针取外号

    typedef struct Student * StuPointer;

    StuPointer stuP;

    stuP = &stu;

    stuP -> age = 40;


2.在定义结构体类型的同时,给指向结构体的指针取别名

    typedef struct Student2

    {

        int age2;

        char *name2;

    } * StuPointer2;

   

    StuPointer2 stuP2;


3.一般没人这样写,这种写法,没有办法定义一个结构体

    typedef struct

    {

        int age3;

        char *name3;

    } *StuPointer3;



* typedef的作用:给现有的数据类型取外号(别名)

    1.有利于加强数据类型的描述性

    2.提高了程序的可扩展性,移植性

    3.减少了代码的书写量,简化了代码


 使用场合

 1.给基本数据类型取外号

 2.给指针取外号

 3.给结构体取外号

 4.给枚举取外号

 5.给指向函数的指针取外号

 6.给指向结构体的指针取外号

 

 注意:typedef仅仅给原有的数据类型取一个别名,并不是真的创建了一个新的数据类型



四.typedef和#define的区别与注意点


 #define  它仅仅是简单的替换,别的啥也没做(在代码翻译成01之前做)

 typedef 是给我们原有的数据类型取一个新的外号

 注意点:如果要用其它的名称来替换现有的数据类型,用typedef,不要用#define



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值