一个宏定义的用法

来源:互联网 发布:ipad1越狱安装软件 编辑:程序博客网 时间:2024/04/30 00:32
宏定义就是简单的替换,之前没见过带符号的替换,看到这个有点懵了,记录如下。这里用 n, 代替 FNINFO(n,l),用的很巧妙。
  
#define FNINFO(n,l) n,
MeasValue (*(MeasFnTbl[]))() = {
#      include <names.h>
};

/*
以下为names.h中内容:
FNINFO( doMinMaxMidHiLo, MIN  )
FNINFO( doMinMaxMidHiLo, MAX )
FNINFO( doMinMaxMidHiLo, PEAKTOPEAK )
FNINFO( doMinMaxMidHiLo, MID )
FNINFO( doMinMaxMidHiLo, HIGH )
FNINFO( doMinMaxMidHiLo, LOW )
FNINFO( amplitude, AMPLITUDE )
FNINFO( mean, MEAN )
其中
#define MIN 0
#define MAX 1
#define PEAKTOPEAK 2
#define MID 3
#define HIGH 4
#define LOW 5
#define AMPLITUDE 6

利用宏定义替换头文件中内容:
FNINFO( doMinMaxMidHiLo, MIN  )  替换成 doMinMaxMidHiLo,
FNINFO( doMinMaxMidHiLo, MAX )          替换成doMinMaxMidHiLo,
FNINFO( doMinMaxMidHiLo, PEAKTOPEAK )   替换成doMinMaxMidHiLo,
......

上面那个函数指针数组就变成了:
MeasValue (*(MeasFnTbl[]))() = {
doMinMaxMidHiLo,
doMinMaxMidHiLo,
doMinMaxMidHiLo,
};

它是这样使用的:
typedef Double MeasValue;
MeasValue value = (MeasValue) (*MeasFnTbl[meas])(Pwfm, Pqual); // meas就是一个int型 
*/
0 0