我正在C11写一个引导程序.当引导程序需要将控件传输到固件时,它会读取一个预定义的存储器地址的函数指针并调用它.代码如下所示:
@H_301_2@typedef void (FirmwareBootFn)(void);
typedef struct
{
uint32_t stackPointer;
FirmwareBootFn* programCounter;
}
FirmwareBootControl;
static FirmwareBootControl g_bootControl __attribute__ ((section (".boot_control")));
void
Firmware_boot( void )
{
setStackPointer( g_bootControl.stackPointer );
g_bootControl.programCounter();
}
功能Firmware_boot()从不返回,所以把它定义为noreturn是有意义的:
@H_301_2@#include <stdnoreturn.h> noreturn void Firmware_boot( void );但是我需要声明FirmwareBootFn为noreturn,以避免编译器抱怨Firmware_boot()可能返回.
我尝试(可能)在typedef的每个排列的noreturn没有任何结果.我也明白,该属性不能在typedef中设置,因为它不是类型的一部分.
有没有办法标记我的Firmware_boot()作为noreturn避免警告(没有作弊与警告抑制:-))?