gpt4 book ai didi

c - 在另一个 header 中定义函数时遇到编译问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:24 25 4
gpt4 key购买 nike

所以我想知道为什么会出现以下错误:

Error 1 undefined reference to `MIN_COUNTER' C:\Users\Wyatt Crosby\Dropbox\Atmel Studio\ReflowController\ReflowController\ReflowController\Debug/.././ReflowController.c 146 1 ReflowController

在 PID.h 中我有:

#ifndef PID_H
#define PID_H

#define LCD_SCREEN_SIZE 16
#define MAX_COUNTS 180
#define OVEN_MAX_TEMP 260
#define OVEN_MIN_TEMP 0
#define MIN_COUNTER(x,a) tempLookupArray[x] < a ? x : MIN_COUNTER(x+1,a)
#define FIND_COUNTER(a) a <= OVEN_MIN_TEMP ? MAX_COUNTS : MIN_COUNTER(0,a)
const float tempLookupArray[MAX_COUNTS];
...

在 PID.c 中进一步定义了 tempLookupArray:

const float tempLookupArray[MAX_COUNTS] = {
260.00,
260.00,
260.00,
259.99,
259.98,
259.96,
...

在 ReflowController.c 中,我包含 PID.h 并写入:

TriggerCounter = FIND_COUNTER(PIDgain);

其中 PIDgain 是本地的且类型为“float”,而 TriggerCounter 是全局的且类型为“volatile int”

这似乎是我试图从 MIN_COUNTER 内部调用 MIN_COUNTER 并且还没有任何类型的原型(prototype)(如果它是一个函数)。 . .

你们这些聪明人有什么想法吗?

谢谢!

最佳答案

预处理器完成你的代码后,

TriggerCounter = FIND_COUNTER(PIDgain);

成为

TriggerCounter = PIDgain <= 0 ? 180 : tempLookupArray[0] < PIDgain ? 0 : MIN_COUNTER(0+1,PIDgain);

此时,预处理器将代码交给编译器和链接器,编译器和链接器寻找名为 MIN_COUNTER 的方法但找不到。在这种情况下,预处理器不会递归工作。想象一下,如果它发生了:你写的代码会让编译器陷入无限循环;它需要扩展 MIN_COUNTER,为此,它需要扩展另一个 MIN_COUNTER 等等...

尝试使用实际函数而不是宏

int min_counter(int x, float a) {
return tempLookupArray[x] < a ? x : min_counter(x+1,a);
}

int find_counter(float a) {
return a <= OVEN_MIN_TEMP ? MAX_COUNTS : min_counter(0,a);
}

除了正确递归之外,它还会避免宏的一些注意事项(例如,FIND_COUNTER(i++) 会多次递增 i,而 find_counter(i++)不会)

关于c - 在另一个 header 中定义函数时遇到编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17395399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com