标题: #define LENGTH 1*1 怎么理解? [打印本页]

作者: Kxuan163    时间: 2021-6-15 16:09
标题: #define LENGTH 1*1 怎么理解?


#ifndef _KALMAN_H
#define _KALMAN_H

#define LENGTH 1*1     
#define ORDER 1
#define N 100
#define SEED 1567

//=============//
//== 最优值结构体 ==//
//=============//
typedef struct _tOptimal
{
float XNowOpt[LENGTH];
float XPreOpt[LENGTH];
}tOptimal;

extern void KalMan_PramInit(void);
extern float KalMan_Update(float *Z);

#endif


作者: xuyaqi    时间: 2021-6-15 16:38
把程序里有 LENGTH 的地方用 1*1  替换。
作者: Kxuan163    时间: 2021-6-15 18:45
xuyaqi 发表于 2021-6-15 16:38
把程序里有 LENGTH 的地方用 1*1  替换。

谢谢回答!
1*1 表示什么?  表示 1行1列矩阵?
作者: Kxuan163    时间: 2021-6-16 00:55
1*1  表示1行1列的二维数组?
作者: 黄youhui    时间: 2021-6-16 08:46
Kxuan163 发表于 2021-6-15 18:45
谢谢回答!
1*1 表示什么?  表示 1行1列矩阵?

乘法不会吗?放在宏定义只是为了方便快速替换。float XNowOpt[LENGTH];   float XPreOpt[LENGTH];替换这两数组的元素个数。
作者: Kxuan163    时间: 2021-6-16 14:33
黄youhui 发表于 2021-6-16 08:46
乘法不会吗?放在宏定义只是为了方便快速替换。float XNowOpt[LENGTH];   float XPreOpt[LENGTH];替换这 ...

若将*理解为乘法算符,1*1结果是1,那么,以下两个宏定义有何区别?
#define LENGTH  1*1
#define LENGTH  1


作者: glinfei    时间: 2021-6-16 14:53
Kxuan163 发表于 2021-6-16 14:33
若将*理解为乘法算符,1*1结果是1,那么,以下两个宏定义有何区别?
#define LENGTH  1*1
#define LEN ...

你说的这两个定义,在程序上是一样的,但你应该在弄卡曼滤波,LENGTH是在定义矩阵,简单说你在处理单模型单测量,所以就是1*1,为了理解方便,如果自己用,且单模型单测量,当然直接上1了还定义啥啊。

作者: 黄youhui    时间: 2021-6-17 08:50
Kxuan163 发表于 2021-6-16 14:33
若将*理解为乘法算符,1*1结果是1,那么,以下两个宏定义有何区别?
#define LENGTH  1*1
#define LEN ...

一个班级有X排课桌Y列课桌整整齐齐方方正正的,我宏定义一个班级课桌数量 X*Y有毛病吗?难道5行6列课桌定义成5*6不比定义直接定义成30更加清晰可观吗?这里要的不是宏定义的结果,而是要理解起来和修改起来更加方便,5*6一看就知道课桌是怎么排的?有多少张?至于为何不用二维数组,就得问写函数的人了。
作者: shumivan    时间: 2021-6-17 11:17
这个是直接替代,可以减少内存的开销.使用带参数的宏既代替了函数的功能,有避免了函数入栈和出栈操作,减少了系统的开销,提高了运行的效率。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1