小编Max*_*axP的帖子

如何在protobuf 3中定义可选字段

我需要在protobuf(proto3语法)中指定带有可选字段的消息.就proto 2语法而言,我想表达的信息是这样的:

message Foo {
    required int32 bar = 1;
    optional int32 baz = 2;
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,"可选"概念已从语法proto 3(以及所需概念)中删除.虽然不清楚替代方法 - 使用默认值来声明尚未从发送方指定字段,但如果默认值属于有效值域,则会留下歧义(例如考虑布尔类型).

那么,我应该如何对上面的消息进行编码?谢谢.

protocol-buffers protocol-buffers-3

61
推荐指数
6
解决办法
5万
查看次数

如何使用函数指针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();
}
Run Code Online (Sandbox Code Playgroud)

函数Firmware_boot()永远不会返回,因此将其声明为noreturn:

#include <stdnoreturn.h>

noreturn void
Firmware_boot( void );
Run Code Online (Sandbox Code Playgroud)

但我需要声明FirmwareBootFn,noreturn以避免编译器抱怨Firmware_boot()可能返回.

我尝试(可能)noreturntypedef没有任何结果的情况下的每个排列.另外我明白属性不能在中设置,typedef因为它不是类型的一部分.

有没有办法把我标记Firmware_boot()noreturn避免警告(没有作弊警告抑制:-))?

c c11 noreturn

12
推荐指数
1
解决办法
1080
查看次数

标签 统计

c ×1

c11 ×1

noreturn ×1

protocol-buffers ×1

protocol-buffers-3 ×1