【Xcode学C-6】宏定义#define、条件编译#if、文件包含、内部外部函数以及typedef的用法

一、宏定义


(1)宏定义一般就是在开头用#define *** ***,一般就是做一个简单替换,后面没有分号。


(2)宏定义的变量一般都是大写,或者在所有宏定义变量前面添加统一的前缀。


(3)宏定义是预处理的一种,就是在代码被编译成0和1之前做得那个操作。


(4)还有一种是带有参数的宏定义,如#define SUM(v1+v2) v1+v2(括号于后面之间有空格),在后面应用的时候SUM(a+b),其实就被替换成a+b了,相当于有参数的运算。


(5)宏定义效率比函数高。做简单地运算用宏定义,复杂的还是用函数。


二、条件编译(也是预处理的一种)


(1)一般条件语句,虽然满足条件只执行一部分代码,另一部分因为不满足条件不被执行,但是所有代码都会被编译,所以文件会变大。


(2)条件编译就是,满足条件的就编译,不满足条件的就不编译,文件大小得到控制,但明显不利于阅读。


(3)主要用法,就是定义一个宏变量,取不同值表示在开发阶段和发布阶段分别编译,比如开发阶段是网址****/test,发布阶段是****/public,所以可以定义一个宏变量,在开发的时候用test,发布的时候把test换成public即可,而不用手动修改。

#define A 1
int main(int argc, const char * argv[]) {
#if A==1
    printf("hello");
#elif A==2
    printf("world");//只编译这一句,其他的相当于不存在
#else
    printf("hi");
#endif
    
    return 0;
}

三、文件包含


(1)#include "***.h",.h文件不会被编译,仅仅是被拷贝过来。可以重复导入,但是我们在C语言里面可以用上面的条件编译防止重复引导,即书写“如果没有一个宏变量,那么创建这个宏变量,顺便执行下面代码”,这样在重复导入的时候,后面的导入也会判断发现已有宏变量,所以就能防止。


(2)对于OC语言,已经自动内嵌防止重复导入的功能,不用用户操心。


(3)头文件不能相互引用,只能单向的。


四、函数种类


(1)函数分为内部函数和外部函数,默认的所有函数都是外部函数,即本文件和其他文件都能调用,一般函数前面的extern被省略了。不能有同名的外部函数。


(2)内部函数前面需要有static,内部函数只能被本文件调用,可以通过调用其他文件的外部函数(调用内部函数)来调用其他文件的内部函数。内部函数可以同名。


注意:全局变量也分为内部变量和外部变量两种,同理,外部的那种其他文件也能访问,默认情况下都是外部的那种。关键字依然是static和extern。


五、typedef


(1)给类型名称取个别名。如typedef int myInt,然后就可以用myInt定义变量了。更实用的在于定义结构体变量时候,平时都是struct person p1;我们可以用typedef struct person pp,用pp代替一长串,以后再书写可以简化成pp p1;。


(2)同理,定义枚举变量也是比较复杂,可以用以上方法简化。


(3)还可以为指向函数和结构体的指针取别名。


(3)typedef与#define的区别

#define STRING char*
typedef char* string1;

int main(int argc, const char * argv[]) {
    //#define和typedef的区别,在定义多个变量时,宏变量#define仅仅是替换,会产生问题
    //下面一句相当于char *str1;和char str2;
    STRING str1,str2;
    //下面一句相当于char *str3和char *str4;
    string1 str3,str4;
    
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值