虽然,我确实将函数原型定义为具有size_t无符号类型的类型.我发现我仍然可以将负数传递给函数,但输出将是一个大的有符号十进制数.我问这个的原因是因为我想验证一个已知数组容量的数组索引.
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
void print(size_t i)
{
printf("%zu\n", i);
}
int main()
{
print(-1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
18446744073709551615
是否可以验证size_t i变量是否大于0?如果是这样我怎么能这样做?gcc不喜欢我检查i >= 0因为它说i永远不会小于零.
编辑:
有待进一步说明.想象一下,您必须验证,而不是将任意小数传递给函数以获取索引i处的元素.我想确保传入的索引在边界内.边界是:[0,N)
C的类型提升系统,结合参数类型为size_t无符号类型的事实,排除了从函数内部检测错误用法的任何方法.但是,您可以通过宏从外部检测它:
#define print(x) do { if ((x)<0) { /* error */ } else print(x); } while(0)
Run Code Online (Sandbox Code Playgroud)
或类似的.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |