IOS学习---C语言基础学习7(预处理指令)

预处理指令:
所有的预处理指令都是以#开头
代码翻译成0和1之前执行的指令
1、宏定义
2、条件编译
3、文件包含
预处理指令的位置是随便写的,但是预处理指令是有作用域的

一、宏定义
格式:#define COUNT 6
      #undef count  作用失效,作用域结束
宏定义一般是大写,或者以k开头

2、带参数的宏
#define sum(v1,v2) v1+v2
int a =10;
int b = 20;
int c = sum(a,b);
printf("%d",c);//输出30
宏定义只负责替换代码 不负责进行算术计算
注意:
大参数的宏定义,一定要加()否则可能导致计算错误
#define pingfang(a) ((a)*(a))

带参数的宏定义效率比函数高


二、条件编译:
只有符合条件的语句才参与编译
有#if必须有#endif 

#if defined(A) //#if def A
printf("");
#endif

文件关联(include):
<>表示系统自带的,“”表示自定义的文件
不允许循环包含,比如a.h包含b.h,b.h又包含a.h
当程序较大,存在多个文件时
例如:
一个主函数文件 main.c
一个算术函数文件 jisuan.c
编译运行的时候要将两个一起编译运行,但main.c文件中有没

有对jisuan.c中函数的声明,因此需要,jisuan.c文件的编写

者编写一份.h文件,将所用到的函数的声明写到.h文件中区,

并在主函数中添加 #include “xxx.h”;将这个文件包含进来

.h文件的写法
内容:是非中函数的声明语句
注意:为了保证.h文件能够准确执行在书写时应添加判断
例如:
#ifndef xx_h//此处的命名规则要谨记
#define xx_h
...函数的声明
#endif


typedef:
基础类型改名:
typedef int MyInt ;给int起一个别名 程序中可以代替int
MyInt a=20;

字符指针变字符串string
typedef char * string; 给指针类型char*起一个别名string
string name ="jack";
结构体:
typedef struct student Mystu;

Mystu stu;
或者
typedef struct student //定义类型  改变名称
{
int age;
}Mystu;
或者
typedef struct   //未定义类型  只是给定义的结构体改一

个名字
{
int age;
}MyStu;

定义一个指向函数的指针
typedef int (*MyPoint)(int,int);

MyPoint p = sum;//这样声明跟定义

typedef作用:
1、给已经存在的类型起一个新的名称
2、适用场合:
   ①基本数据类型
   ②指针
   ③结构体
   ④枚举
   ⑤指向函数的指针

注意:
#define string2 char*
string2 s1,s2;

#define 只是简单的替换,上面的语句相当于
char *s1,s2; 相当于
char *s1; char s2;
但是:
typedef char* string
string s1,s2;
typedef是给已存在类型起一个新的名称,相当于
char*(s1,s2); 相当于
char *s1; char *s2;


static和extern
1、函数
外部函数:定义的函数能被本文件和其他文件访问,默认情况

下所有函数都是外部函数
extern void test()extern 可以省略,因为默认均为外部
{
printf("调用了test");
}
不允许有同名外部函数、

内部函数:定义的函数只能被本文件访问,其他文件不能访问
static void test2()
{
printf("调用了test2");
}
允许不同文件中有同名的内部函数

static对函数的作用:
1、定义一个内部函数
2、声明一个内部函数
extern 对函数的作用:
1、完整的定义一个外部函数
2、完整的声明一个外部函数
extern可以省略,默认情况下声明和定义的函数都是外部函数



2、变量
全局变量:
1、外部变量:
定义的变量能被本文件和其他文件访问
①默认情况下,所有的全局变量都是外部变量(不同文件中的

同名全局变量实际上是一个变量,占据同一个的内存空间)
(extern)int a ;即定义外部变量

2、内部变量:
定义的变量只能被本文件访问,不能被其他文件访问
static int b;
不同文件中的同名内部变量,互不影响
static 对变量的作用:
①定义一个内部变量

extern对变量的作用
①定义一个外部变量

static对函数的作用
①定义和声明一个内部函数

extern对函数的作用:
定义和声明一个外部函数(可以省略)


static修饰局部变量:
①延长局部变量的生命周期,程序结束的时候,局部变量才会

被销毁
②并没有改变局部变量的作用域
③所有的test函数都共享着一个变量b
④适用场合:如果某个函数的调用频率特别高,这个函数内部

的某个变量值是固定不变的
void test(){
int a=0;
a++;
pirntf("%d",a);

//第二次调用发现已存在 b 自动忽略 static int b =0;
static int b=0;
b++;
printf("%d",b);
}
int main()
{
test();//a=1;b=1;
test();//a=1;b=2;
test();//a-1;b=3;
}

递归:
每次调用都是重新开辟内存空间
条件:
①函数本身调用本身
②必须有个明确的返回值

问题4:
条件编译只有符合条件的语句才参与编译,那么后面的不符合

条件的语句 即使产生语法错误也不会报错吗

问题5:
typedef的用法?




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值