在程序设计时,可以根据条件编译告诉编译器的条件执行或者忽略代码。例如在配置从机(eg: 模拟前端)的寄存器时,需要确认数据写入是否成功,进行读出和重写!此时可选择性的选择是否重写和重写次数。如下:
SendDataToAddr(ADDR_AFE_BIM1,Body_FWR_50KHz);
#if(DEBUG_CS1258_REWRITE == 1)
uint8 count = REREAD_REWRITE_NUM;
while(count != 0){
if(ReadAddrData(ADDR_AFE_BIM1) != Body_FWR_50KHz){
myPrintf(MY_PRINTF_ERROR,"%s(%d):SendDataToAddr error;\r\n",__func__,__LINE__);
DelayTimeMs(10);
SendDataToAddr(ADDR_AFE_BIM1,Body_FWR_50KHz);
}
else{
break;
}
count--;
}
if(count == 0){
myPrintf(MY_PRINTF_ERROR,"%s(%d):count == 0;\r\n",__func__,__LINE__);
}
#endif
条件编译规则如下:
#ifdef MAVIS //如果定义了MAVIS,则执行下面的条件
{
;
}
#else //如果未定义了MAVIS,则执行下面的条件 //#else 可省略
{
;
}
#endif
// 备注: C只编译符合条件的模块;
// 例如:
#ifdef CUSTOMIZED
// thread 0
{
"Dsp1-thread0", // thread name
Alg_init, // init function
Alg_prep, // pre-process function
Alg_proc, // main process function
Alg_deinit, // de-init function
TRUE, // need output buffer?
},
#endif
// thread 1,
{
"",//Dsp1-thread1", // thread name
NULL, // init function
NULL, // pre-process function
NULL, // main process function
NULL, // de-init function
FALSE, // need output buffer
}
再例如:在定义头文件时,为了避免重复定义使用#ifndef #endif来定义。
#ifndef __USER_CS1258_H__
#define __USER_CS1258_H__
#define U8 unsigned char // 关键字重定义
#define U16 unsigned short
#define U32 unsigned int
#include "esp8266.h" // 库文件包含
#define EVENT_DISABLE_CS1258_TEST 0 // 明示常量
typedef struct CS1258Event_s{ // 结构体定义
char event; //事件
int dat; //数据
}CS1258Event_t;
void userCs1258Init(void); // 函数原型声明
#endif
/*
备注:
1) 一个功能中,包含一个.C文件和一个.h文件。在.h文件中最好将用#ifndef #endif将 关键字重定义,库文件包含,宏参数定义,结构体定义,函数声明等包含进去。这样,头文件可以避免被多次包含。头文件中定义的变量不存在重复声明或定义。
2)__USER_CS1258_H__ :下划线“__”属于编程风格的内容,对程序没有影响。不用下划线也可以,用几个下划线也由个人习惯。需要大写是因为其实质是一个宏名,宏名需要大写,其次下划线是为了容易区分,避免命名重复;注:标准保留使用下划线作为前缀, 所以在自己的代码中不要这样写, 避免与标准头文件中的宏发生冲突。
3)C语言一般支持8层以上的文件包含;
4)当预处理器首次发现该文件被包含时,__USER_CS1258_H__ 是未定义的, 所以定义了__USER_CS1258_H__ , 并接着处理该文件的其他部分。 当预处理器第2次发现该文件被包含时, __USER_CS1258_H__ 是已定义的,所以预处理器跳过了该文件的其他部分。
*/
再例如,运用#if #elif #elif #else #endif 来进行条件编译
#if defined (IBMPC) //可以用 #if defined(VAX) 代替 #ifndef VAX 和#elif 一起使用;
#include "ibmpc.h"
#elif defined (VAX)
#include "vax.h"
#elif defined (MAC)
#include "mac.h"
#else
#include "general.h"
#endif