Tag: noreturn

如何使用函数指针noreturn?

我在C11写一个bootloader。 当引导加载程序需要将控制转移到固件时,它会在预定义的内存地址读取一个函数指针并调用它。 代码如下所示: 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是有意义的: #include noreturn void Firmware_boot( void ); 但是我需要将FirmwareBootFn声明为noreturn ,以避免编译器抱怨Firmware_boot()可能会返回。 我尝试(可能) typedef中的noreturn每个排列没有任何结果。 另外我明白属性不能在typedef设置,因为它不是类型的一部分。 有没有办法标记我的Firmware_boot()作为noreturn避免警告(没有作弊警告抑制:-))?

告诉gcc函数调用不会返回

我在GCC下使用C99 。 我有一个函数在头文件中声明为static inline ,我无法修改。 函数永远不会返回,但未标记为__attribute__((noreturn)) 。 如何以告诉编译器不会返回的方式调用该函数? 我从我自己的noreturn函数调用它,部分想要抑制“noreturn函数返回”警告但也想帮助优化器等。 我已尝试在属性中包含声明,但会收到有关重复声明的警告。 我已经尝试创建一个函数指针并将该属性应用于该函数,但它表示函数属性不能应用于指向函数。