C++ 以.(点)为前缀的结构变量名需要解释

C++ 以.(点)为前缀的结构变量名需要解释,c++,C++,这是从中提取的代码。我未能理解以下内容: 1) struct关键字后面是结构名称(obs\u encoder\u info)和标记(opus\u encoder\u info)吗 2) 如何在结构变量前面加上。(点)?它是另一个结构的成员变量吗 struct obs_encoder_info opus_encoder_info = { .id = "ffmpeg_opus", .type = OBS_ENCODER_AUDIO, .c

这是从中提取的代码。我未能理解以下内容:

1) struct关键字后面是结构名称(obs\u encoder\u info)和标记(opus\u encoder\u info)吗

2) 如何在结构变量前面加上。(点)?它是另一个结构的成员变量吗

struct obs_encoder_info opus_encoder_info = {
   .id             = "ffmpeg_opus",
   .type           = OBS_ENCODER_AUDIO,
   .codec          = "opus",
   .get_name       = opus_getname,
   .create         = opus_create,
   .destroy        = enc_destroy
};
这是(从C++20开始)

因此,它声明了一个名为
opus\u encoder\u info
的对象,其类型为
obs\u encoder\u info
,其数据成员
id
用值
初始化,“ffmpeg\u opus”
类型
用值
obs\u encoder\u AUDIO
初始化,等等。

这是(自C++20以来)

因此,它声明了一个名为
opus\u encoder\u info
的对象,类型为
obs\u encoder\u info
,其数据成员
id
用值
“ffmpeg\u opus”
初始化,
类型
用值
obs\u encoder\u AUDIO
初始化,等等

1) struct关键字后面是结构名称(obs\u encoder\u info)和标记(opus\u encoder\u info)吗

差不多。
struct
关键字后面是一个结构名称,但后面是一个变量(不是标记)名称。此行声明(并初始化)
opus\u encoder\u info
为类型为
struct obs\u encoder\u info
的变量。(在C++中,<代码>结构> <代码>关键字不是必需的,但在C中是.< /p> 2) 如何在结构变量前面加上。(点)?它是另一个结构的成员变量吗

struct obs_encoder_info opus_encoder_info = {
   .id             = "ffmpeg_opus",
   .type           = OBS_ENCODER_AUDIO,
   .codec          = "opus",
   .get_name       = opus_getname,
   .create         = opus_create,
   .destroy        = enc_destroy
};
这里的术语有点离题,因为struct变量是
opus\u encoder\u info
,而带点前缀的是struct成员。在任何情况下,
struct obs_encoder_info
显然具有名为
id
type
等的成员,并且
opus_encoder_info
变量的那些字段正在通过初始化,这是C99的一个新功能。(简而言之,通过在大括号内写入
.x=a
,将成员
x
初始化为值
a
。)

是的,我的回答就像代码是用C写的一样,即使这个问题被标记为“C++”。我认为这是合理的,因为我有理由相信这个代码是C. First,在声明一个变量时使用了 Stult关键字——在C中是必需的,但在C++中是多余的。第二,代码来自一个扩展名为“.c”的文件,而不是“.c”(大写)或“.cpp”或任何其他表示C++源文件的扩展名。第三,这类代码存在于(2017年名称发生了变化),使用C++20功能还早,更不用说在生产代码中使用了

因此,我的结论是,这个问题的标签是错误的。然而,答案的存在(以及被接受的答案)意味着修复问题的标签可能会造成比解决问题更多的混乱

1) struct关键字后面是结构名称(obs\u encoder\u info)和标记(opus\u encoder\u info)吗

差不多。
struct
关键字后面是一个结构名称,但后面是一个变量(不是标记)名称。此行声明(并初始化)
opus\u encoder\u info
为类型为
struct obs\u encoder\u info
的变量。(在C++中,<代码>结构> <代码>关键字不是必需的,但在C中是.< /p> 2) 如何在结构变量前面加上。(点)?它是另一个结构的成员变量吗

struct obs_encoder_info opus_encoder_info = {
   .id             = "ffmpeg_opus",
   .type           = OBS_ENCODER_AUDIO,
   .codec          = "opus",
   .get_name       = opus_getname,
   .create         = opus_create,
   .destroy        = enc_destroy
};
这里的术语有点离题,因为struct变量是
opus\u encoder\u info
,而带点前缀的是struct成员。在任何情况下,
struct obs_encoder_info
显然具有名为
id
type
等的成员,并且
opus_encoder_info
变量的那些字段正在通过初始化,这是C99的一个新功能。(简而言之,通过在大括号内写入
.x=a
,将成员
x
初始化为值
a
。)

是的,我的回答就像代码是用C写的一样,即使这个问题被标记为“C++”。我认为这是合理的,因为我有理由相信这个代码是C. First,在声明一个变量时使用了 Stult关键字——在C中是必需的,但在C++中是多余的。第二,代码来自一个扩展名为“.c”的文件,而不是“.c”(大写)或“.cpp”或任何其他表示C++源文件的扩展名。第三,这类代码存在于(2017年名称发生了变化),使用C++20功能还早,更不用说在生产代码中使用了


因此,我的结论是,这个问题的标签是错误的。然而,答案的存在(以及被接受的答案)意味着修复问题的标签可能会导致比解决问题更大的混乱。

这在C语言中是有效的。是否只允许从C++20开始使用?Thanks@ark1974是的,从C++标准的角度来看。我知道一些编译器很久以前就支持这种语法了。请注意,C和C++支持的特征不一致,这个答案对这个问题是否准确?我查看了链接的源文件,在我看来它更像C99而不是C++20。它在C语言中是有效的。是否只允许从C++20开始使用?Thanks@ark1974是的,从C++标准的角度来看。我知道一些编译器很久以前就支持这种语法了。请注意,C和C++支持的特征不一致,这个答案对这个问题是否准确?我查看了链接的源文件,对我来说,它看起来更像C99而不是C++ 20。这是我见过的最奇怪的C++代码。如果我还没有读到已经被接受的答案,我甚至会惊讶地在C++中编译。我真的需要学习C++20。链接到一个扩展名为“.C”的文件。代码使用
struct
关键字声明类型为
struct
的变量。这些是C的指标,而不是C++。你确定这应该是用C++来标记的吗?