为什么会这样:
#include <sys/types.h>
#include <stdio.h>
#include <stddef.h>
typedef struct x {
int a;
int b[128];
} x_t;
int function(int i)
{
size_t a;
a = offsetof(x_t, b[i]);
return a;
}
int main(int argc, char **argv)
{
printf("%d\n", function(atoi(argv[1])));
}
如果我正确地记得 offsetof 的定义,它是一个编译时构造。使用 'i' 作为数组索引会产生非常量表达式。我不明白编译器如何在编译时评估表达式。为什么不将此标记为错误?