我特别想知道什么->val
在
sizeof(((stoken_t*)(0))->val)
还有什么stoken_t*(0)
指针做的,特别是什么(0)
方法?我希望我已经足够清楚地表达了我的问题。
最佳答案
这是一种在编译时访问结构成员的方法,无需定义该结构类型的变量。
类型转换 (stoken_t*)
到 0
的值模拟该结构类型的指针,允许您使用 ->
运算符,就像您在该类型的指针变量上使用它一样。
添加,如 sizeof
是一个编译时运算符,该表达式不会在运行时计算,因此与其他情况不同,这里没有发生空指针取消引用。
它类似于类似的东西
stoken_t * ptr;
sizeof(ptr->val);
关于c - 这行代码 "#define LIBINJECTION_SQLI_TOKEN_SIZE sizeof(((stoken_t*)(0))->val)"有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63774132/