【发布时间】:2015-03-24 11:39:05
【问题描述】:
假设我们有一个数组:
struct some array[] = {A, B, C, D};
假设我们有一个函数,给定一个参数索引,用这个值做一些事情:
void sfrugula(size_t index){
do_it( &array[index] );
}
现在,我们知道我们希望几乎总是使用 STATIC 值而不是变量来调用该函数,例如:
sfugula(10);
有没有办法检查编译时没有溢出以及是否抛出错误?
关键是在编译时硬限制和检查参数(如果可能的话),因为这不仅可以应用于数组,甚至可以应用于某些变量。
【问题讨论】:
-
最好拥有包含所有可用检查的“DEBUG”版本。
-
在 C 中,没有对数组边界的继承检查。因此,被调用函数需要知道数组中的条目数并根据该限制检查参数。那将是在执行时。我知道没有办法在编译时检查。
-
这是什么意思?没有编译时检查的调试版本意味着我必须使用测试程序检查所有可能的结果。编译检查更安全、更快。然后仍然应该运行测试以检查其他错误
-
@user3629249 我知道没有检查,我要的是在编译时有一些硬限制值的指令。我知道使用这种方法在运行时无法检查变量,与数组的使用只是一个示例。但是静态访问会更安全一些。
标签: c c-preprocessor buffer-overflow