您的位置:首页 > 其它

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

2014-10-09 21:31 676 查看
一、宏定义

(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐