您的位置:首页 > 其它

预编译、类型定义、static、extern及函数指针

2015-06-21 08:59 405 查看
1、宏定义

// 不带参数的宏定义
#define pai=3.14int main()
{
int a;
int r=6;
a=2*pai*r// 编译前会被替换为 3.14
return 0;
}

// 带参数的宏定义
#define pingfang(a) (a)*(a);
int main()
{
int res = pingfang(5+5);	// 编译前会被替换为 int res = (5+5)*(5+5)
return 0;
}


注意:
1、宏定义只会影响他后面的语句,它前面的不会被替换;
2、带参数的宏定义需要将参数和结果都加上(), 否则会出现错误;#define pingfang(a) (a*a);替换后就会变成5+5*5+5

2、条件编译

在编译前进行判断那段代码需要编译 那些不需要编译

#ifndef _WR_H_
#define _WR_H_
#include "wr.h"
#end if


二、static和extern

static:

函数 文件级私有函数,被其他文件包含了也不能使用

全局变量 文件级私有的全局变量,被其他文件包含了也不能访问

局部变量 函数内部的静态变量,函数被销毁该变量依然存在直到程序结束

extern:

全局函数 被其他文件包含了可以使用,默认情况下就是extern所以extern关键字可以省略而且不能有相同的函数民

全局变量 声明一个全局变量,默认情况下就是extern所以extern关键字可以省略,如果定义了相同的变量名那么他们是同一个变量

三、typedef

给已经存在的类型起一个新的名称

// 基本数据类型
typedef int MyInt;

// 指针
typedef char * String;

// 结构体
typedef struct
{
char *name;
int age;
} Person;

// 枚举
typedef enum {
Man,
Woman
} Sex;

// 指向函数的指针
typedef int (*MyPoint)(int, int);

指针函数:
(1)定义:返回值为一个某一类型指针的函数称为指针函数。

(2)格式:类型说明符* 函数名(形参列表);*表示返回值为一个指针或地址。

(3)程序示例如下:

#include<stdio.h>

int* max(int x,inty)

{

return x>y?x:y;

}

int main(int argc,const char* argv[])

{

int a=3,b=4;

int *p=max(3,4);

printf("%p\n",p);

return 0;

}

该函数打印输出p的地址,该函数属于值传递。

函数指针:

(1)定义:存放函数首地址的指针变量就是函数指针

(2)格式:类型说明符 (*变量名)(函数的参数列表);

(3)程序示例如下:

#include <stdio.h>

int sum(int x,int y)

{

return x+y;

}

int main(int argc, const char * argv[])

{

int s=0;

int (*p)(int a,int b); //定义函数指针

p = sum; //给函数指针赋值,p指向sum,sum存的就是函数的首地址。

s = p(23,34);

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

return 0;

}

该函数打印输出结果为57。

注意:

1、函数指针变量不能进行算术运算,这是与数组指针不一样的。

2、函数调用中*两边的括号不能少,另外,*只是一个符号,不能认为是取值运算。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: