c - C 静态结构声明指令
问题描述
我正在尝试声明一个静态 C 结构。结构体的声明如下:
typedef struct {
int a;
int b;
int c
}dummy_struct;
但是,在定义结构时,我想在 c 中存储一个值,该值是使用 a 和 b 中的值以及另一个常量值计算得出的。
我最初的想法是这样存储它:
static dummy_struct dummy =
{
.a = 5,
.b = 10,
.c = CALC_VALUE(0.5, a, b)
}
然后我将 CALC_VALUE 定义为预处理器,这样我就可以对 a、b 和常量值进行一些计算,如下所示:
#define CALC_VALUE(constant, a, b) (constant * (a/2) * (b*3))
但是每次我这样做时我的编译器都会抱怨,所以我使用以下方法进行声明:
static dummy_struct dummy =
{
.a = 5,
.b = 10,
.c = CALC_VALUE(0.5, 5, 10)
}
有没有更简洁的方法来做到这一点而不使用#defines for 'a' and 'b'
解决方案
使用宏来生成结构的整个初始值。
#define CALC_VALUE(constant, a_val, b_val) { \
.a = (a_val), \
.b = (b_val), \
.c = ((constant) * ((a_val)/2) * ((b_val)*3)) \
}
然后你可以这样做:
static dummy_struct dummy = CALC_VALUE(0.5, 5, 10);
推荐阅读
- java - 从 Apache Netbeans 中删除的文件去哪里了?
- asp.net-core - 两个站点相同的 IIS 服务器,RunImpersonation HttpClient 传递空 NTLM 凭据
- azure - 为什么我的 Azure 容器实例几天后突然无法拉取镜像?
- react-native - React Native Linking eventListener 因深度链接而崩溃
- c++ - 我可以使用 Pimpl 提供 C++ 头文件,还是必须使用 C 内置类型进行展平?
- migration - 将 SSDT 从 2015 迁移到 2019 会破坏脚本组件
- css - 来自子组件的 Vue 3 插槽样式
- php - 如何使用教义订购?
- .net-core - 如何在 .NET Core 中使用安装项目 (vdproj) 的自定义操作
- javascript - 如何隐藏两个数组中的元素