2.4#undef
知识点:
作用是对#define定义的常量进行移除
基本形式:#undef + 所要移除常量的名称
2.5命令行定义
C语言提供了可以通过终端的方式对符号进行定义(如:gcc -D a = 100 test.c)
一般用于:一个变量先暂时不被定义,就能方便根据后面的具体情况来定
2.6条件编译
知识点:
可以对语句进行选择性的编译/放弃编译(因为有些代码删除了还有点可惜,就留着不编译)
在预处理阶段处理:
1.判断是否为真
#if 常量表达式(为真进去,反之不进)
....
#endif (和#if配套)
#if 常量表达式(其用法和if语句几乎一样,)
//...
#elif 常量表达式
//....
#else
//...
#endif (结束)
2.判断是否被定义
#if define(symbol)
#ifdef symbol (上下等价)
#if !define(symbol)
#ifndef symbol
细节:
如:
#define PRINT 0 int main() { #ifdef PRINT //是否定义该符号,定义了则进去,否则不进去 //#if define(PRINT) printf("%d\n", 1); #endif//和ifdef是一组的,必须成对出现 return 0; } // #define M 2 int main() { #if 1 printf("%d\n", 1);//打印1 #endif #if M == 1 printf("%d\n", 1); #elif M == 2 printf("%d\n", 2);//打印2 #else printf("ohuo"); #endif return 0; }
2.7文件包含
2.7.1文件包含的方式
本地文件包含(" "双引号包含):先在源文件所在的目录下查找,若没找到就在到存放库函数的标准路径下查找。若还找不到则提示编译错误(一般自己创建的头文件是直接放在源目录底下的所以就通过双引号包含即可,并且通过了解了双引号包含就能知道其实库函数的包含也可以用" "包含即#include"stdio.h")
库文件的包含(< >的包含):虽然" "可以实现但是对于库函数来说还是有点麻烦了所以C语言提供了直接到标准路径中去查找头文件(即#include<stdio.h>)
2.7.2文件的嵌套包含
对于头文件的包含来说每一次的包含其实都是将头文件的内容拷贝过来,假如不小心多次包含了同一个头文件的话,就会导致内存的浪费(已经包括过了)
为了防止上述情况我们就可以在头文件中写成如下形式:
#ifndef __def__//判断是否被定义过 #define __def__//若没有定义过则进来定义一遍,反之则不进,这样当第二次来时一定是被定义过的 struct s { int a; }; #endif//结束 //或则还可以更简单的写成 #pragma once//和上面的意思一样 struct s { int a; };
本章完。预知后事如何,暂听下回分解。