#define学习

Posted Jason

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#define学习相关的知识,希望对你有一定的参考价值。

C语言中数据有常量和变量,其中定义常量主要有两种方法,这里主要学习#define定义常量的方法。

1.#define定义数字宏常量

例子如下:

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
 
#define PI 3.14
 
int  main(void)
{
    printf("%d\n",PI);
    printf("%f\n",PI);
    return 0;
}

以上例子通过#define定义了常量PI,其值为3.14。其值为float单浮点数,但是#define定义时没有声明基本数据类型,而是直接定义了一个常量字符来表示此数值。

#define没有显示的声明基本数据类型,因此在使用此方法定义常量时需要程序员清楚常量符号表示的数据是哪一种类型,否则会引起错误。

比如上面例子中PI是单浮点数,通过两种不同的数据类型进行打印,打印的结果如下:

$ ./define.exe
1374389535
3.140000

从结果看差异很大,因此在使用#define常量符号时,需要自判定数据的类型。

 

2.#define定义字符串宏常量

#define  CITY  "WuHan"

这是最简单的字符串宏常量,中间没有任何的转义字符或特殊字符。

#define PATH "E:\\c_study"

这是比较复杂的字符串宏常量,比如路径等,这里需要是双斜杠,否则会报如下错误:

$ gcc define.c -o define
define.c: 在函数‘main’中:
define.c:10:16: 警告:未知的转义序列:‘\c’
printf("%s\n",PATH);
^

即\需要配合转义字符使用。

例子代码如下:

技术分享
#include<stdio.h>

#define PI 3.14
#define  CITY  "WuHan"
#define PATH "E:\\c_study"

int  main(void)
{    
    printf("%s\n",CITY);
    printf("%s\n",PATH);
    return 0;
}
技术分享

输出结果为:

$ ./define.exe
WuHan
E:\c_study

 

3.#define定义函数宏常量

函数宏常量涉及到函数换行,换行=\+回车

例子:

技术分享
#include<stdio.h>

#define dump(name){  printf(name);   printf("\n");   printf(name);   printf("\n"); }


int  main(void)
{    
    dump("test0");
    dump("test1");
    return 0;
}
技术分享

运行结果:

$ ./define
test0
test0
test1
test1

即#define定义时,换行不是以;判定,而是以"/+回车"判定

4.#undef 用来撤销宏常量的定义,撤销后不存在此宏常量

总结:

#define可以定义多种类型的宏常量,需要结合不同的场景使用,每一种场景需要注意对应的数据类型,转义字符和换行等关键地方。













以上是关于#define学习的主要内容,如果未能解决你的问题,请参考以下文章

分享几个实用的代码片段(第二弹)

2C++ 的升级

IOS开发-OC学习-常用功能代码片段整理

Android内核源码bionic目录下的子目录arch-arm源码分析笔记

java SpringRetry学习的代码片段

python 机器学习有用的代码片段