⼀般来讲函数的宏的使⽤语法很相似。所以语⾔本⾝没法帮我们区分⼆者。 那我们平时的⼀个习惯是:
把宏名全部⼤写函数名不要全部⼤写
# undef NAME// 如果现存的⼀个名字需要被重新定义,那么它的旧名字⾸先要被移除
在以上代码的基础上加上#undef ,这里可以理解成一个移除
#include
int main()
{
int array [ARRAY_SIZE];
int i = 0;
for(i = 0; i< ARRAY_SIZE; i ++)
{
array[i] = i;
}
for(i = 0; i< ARRAY_SIZE; i ++)
{
printf("%d " ,array[i]);
}
printf("\n" );
return 0;
}
编译指令:
//linux 环境演⽰gcc -D ARRAY_SIZE= 10 programe.c
如果把232行代码屏蔽掉那么这段代码就会消失(不参与编译)如下:
常⻅的条件编译指令:
1.
#if 常量表达式
//...
#endif
//常量表达式由预处理器求值。
如:
#define __DEBUG__ 1
#if __DEBUG__
//..
#endif
2.多个分⽀的条件编译
#if 常量表达式
//...
#elif 常量表达式
//...
#else
//...
#endif
3.判断是否被定义
#if defined(symbol)
#ifdef symbol
#if !defined(symbol)
#ifndef symbol
4.嵌套指令
#if defined(OS_UNIX)
#ifdef OPTION1
unix_version_option1();
最简单的条件编译可以这样写:
#if 后面是真那么编译,如果是假那么就不编译
#include "filename"
Linux环境的标准头⽂件的路径:
/usr/include
VS环境的标准头⽂件的路径:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include// 这是 VS2013 的默认路径
注意按照⾃⼰的安装路径去找。
# include
用双引号的形式的查找范围更大,但这样代码的运行效率也自然会下降,就好比全局变量和局部变量,想写出一个优秀的代码就应该早期就要养成良好习惯,库头文件用尖括号,自己写的双引号
test.c
#include "test.h"
#include "test.h"
#include "test.h"
#include "test.h"
#include "test.h"
int main()
{
return 0;
}
test.h
void test();
struct Stu
{
int id;
char name[20];
};
#ifndef __TEST_H__
#define __TEST_H__
//头⽂件的内容
#endif //__TEST_H__
或者
#pragma once
#error
#pragma
#line
...
不做介绍,⾃⼰去了解。
#pragma pack()在结构体部分介绍。