This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR5043:函数中结构体列表的返回指针会导致错误

Guru**** 2386610 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1044458/msp430fr5043-return-pointer-to-list-of-struct-from-function-causes-error

器件型号:MSP430FR5043

你(们)好

我正在尝试返回指向预定义结构列表中特定结构的指针。

如果我在同一个文件中有代码、它会起作用、但如果我将它们拆分、我会得到错误

说明资源路径位置类型
符号"第一个"用不兼容的类型重新声明

main.c

#include "main.h"

test_t *active;

int main(void){
	active = first();

	uint32_t value = active->number;
	
	// continued processing ...
}

main.h

#include "test.h"

测试.c

#include "test.h"

test_t list[2] = {
	{.number = 1},
	{.number = 2},
};

test_t * first(void) {
    return &list[0];
}

test.h

#include <stdint.h>

typedef struct {
	uint32_t number;
} test_t;

test_t * first(void);

我出了什么问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在 test.h 中、"test_t"需要在结构和括号之间进行、以创建标签。 如果您有"test_t"、则您将定义一个名为 test_t 的结构

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我将其移动到那里时、就像这样

    #include <stdint.h>
    
    typedef struct test_t {
    		uint32_t number;
    };
    
    test_t * first(void);

    出现新问题

    错误#20:未定义标识符"test_t"

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在发布的代码中看不到此症状。 我只会看到有关"值"未使用的警告。

    我将使用编译器 v18.12.8.LTS

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    哎呀、我对 typedef 和标准结构语法感到困惑。

    我使用了您的初始代码、一切都正常。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter:

    就像 Bruce 和 Keith 一样、当我复制这些文件时、我没有收到任何错误、只是警告没有使用值。 我相信我们收到的代码段是可以的,但是,也许有些旧代码正在创建另一个名为 first()的函数。 我的编译器版本是 TI v20.2.5.LTS。

    是否有使用/声明了 first()的任何其他文件或代码段?

    您使用的编译器版本和 IDE 是什么?

    此致、

    Luke

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我刚刚在 Mac 上安装了它、所以应该是最新的。

    删除您的声明和"首先"的定义、然后右键单击它并选择"显示声明"、使您可以使用任何其他用途。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    问题迎刃而解! 我在头文件中有一个循环导入、这导致了一切。 直到我引入了无效指针、这才不是问题。

    感谢您在测试方面的帮助!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这就是您需要使您的标题具有特发力的原因:

    http://c-faq.com/cpp/nestincl.html

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我都有 ifdefs、 因此最终的解决方案是将进口品解开