3.3#undef
用于移除一个宏定义
#define M 10 int main() { printf("%d\n", M); #undef M printf("%d\n", M); return 0; }
#undef移除宏定义之后,便会出现下面的问题
3.4命令行定义
编译器提供一种能力,允许命令行中定义符号,用于启动编译器
int main() { int arr[n]; int i = 0; for (i = 0; i < n; i++) { arr[i] = i; } for (i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; }
3.5条件编译
在编译程序时,可以将一条语句(一组语句)进行编译或者放弃很方便,因为有条件编译指令。
常见的条件编译指令
#if 常量表达式 //....... #endif //常量表达式由预处理器求其值 int main() { #if 1//为真便执行中间的语句 printf("heihei\n"); #endif return 0; }
多个分支的条件编译 #if 常量表达式 //..... #elif 常量表达式 //.... #else //.... #endif #define M 10 int main() { #if M<5 printf("haha\n"); #elif M==5 printf("hehe\n"); #else printf("heihei\n"); #endif return 0; }
判断是否被定义 #if defined (symbol) #ifdef symbol #if !defined(symbol) #ifndef symbol #define M 100 int main() { #if defined(M) //如果定义M,则执行下面的语句 printf("m"); #endif return 0; }
3.6文件包含
#include指令可以使另外一个文件被编译。
例如如果在头文件中声明一个函数,在源文件中多次引用头文件,则源文件中便会多次声明函数。
3.6.1头文件被包含的方式
#include"filename"
#include<filename>
3.6.2嵌套文件包含
#ifndef __TEST_H__//如果__TEST_H__已经未被定义,则执行下面的语句 #define __TEST_H__ //头文件内容 #endif //__TEST_H__
或者
#pragma once//只引用一次
避免了头文件的多次引用