gpt4 book ai didi

c - 编译时硬限制参数值

转载 作者:太空宇宙 更新时间:2023-11-04 03:40:17 26 4
gpt4 key购买 nike

假设我们有一个数组:

struct some array[] = {A, B, C, D};

假设我们有一个函数,给定一个参数索引,用那个值做一些事情:

void sfrugula(size_t index){
do_it( &array[index] );
}

现在,我们知道我们希望几乎总是使用 STATIC 值而不是变量来调用该函数,例如:

sfugula(10);

有没有办法在编译时检查是否有溢出以及是否抛出错误?

重点是在编译时(如果可能的话)对参数进行硬限制和检查,因为这可能不仅适用于数组,甚至可能仅适用于某些变量。

最佳答案

这是我的解决方案,它使用枚举和 X 宏:

我创建了一个外部文件“ports.h”。 X() 的左边元素是“用户使用的好听的名字”,右边是对应的 REAL 值(或者它的唯一部分,如下所示)

#ifdef DDRA && PORTA && PINA
X(A, AAA)
#endif
#ifdef DDRB && PORTB && PINB
X(B, BBB)
#endif

然后在另一个文件中我声明了枚举(A、B、....)和指向实际元素的指针的并行数组(在这种情况下女巫是 my_AAA、my_BBB 等...)

#define SEP ,
#define X(a, b) a SEP
enum PORTS {
#include "ports.h"
};
#undef X

/* here we initialize the array of structure */
#define X(a, b) &my_##b SEP
static const uint8_t *array[] =
{
#include "ports.h"
};
#undef X
#undef SEP

最后只需更改我们的函数以使用枚举

void sfrugula(enum PORTS p){
do_it( &array[p] );
}

我必须做的唯一不同的事情是在使用函数时使用枚举而不是数值,但是如果我忘记了,编译器不会抛出警告;现在我正在寻找一些 typedef magic实现这一点(在 C++ 中,如果您使用“-Wenum-compare”就已经很好了,如果使用“-Wall”,女巫默认是这样的)

关于c - 编译时硬限制参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29231686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com