sizeof 运算符 returns 有没有可能为 0?
Is there any chance the sizeof operator returns 0?
我需要 return 从 C 到 Java 的值 sizeof(some_t)
。
JNIEXPORT jint JNICALL blar(blar) {
#ifndef some_t
return ?;
#else
return sizeof(some_t);
#endif
如您所见,我必须 return 为类型 甚至未定义 的情况提供一些值。那么这种情况下的最佳价值是多少? 0
还是 -1
?这就是为什么我要问在任何非错误情况下是否存在 sizeof
操作 returns 0
的情况。
C 中的对象始终具有正大小,因此没有 sizeof
永远不会导致 0
。
C 不允许空 struct
或 union
类型,并且数组 必须 的大小大于 0
。所以没有正确的 C 类型可以 return 0
.
的值
这个答案依赖于未定义的行为;不使用
% cat so30681402.c
#include <stdio.h>
int main(void) {
int za[0];
printf("sizeof array with no elements is %d.\n", (int)sizeof za);
return 0;
}
% clang -std=c99 -pedantic -Weverything so30681402.c
so30681402.c:4:12: warning: zero size arrays are an extension
[-Wzero-length-array]
int za[0];
^
1 warning generated.
% ./a.out
sizeof array with no elements is 0.
%
我需要 return 从 C 到 Java 的值 sizeof(some_t)
。
JNIEXPORT jint JNICALL blar(blar) {
#ifndef some_t
return ?;
#else
return sizeof(some_t);
#endif
如您所见,我必须 return 为类型 甚至未定义 的情况提供一些值。那么这种情况下的最佳价值是多少? 0
还是 -1
?这就是为什么我要问在任何非错误情况下是否存在 sizeof
操作 returns 0
的情况。
C 中的对象始终具有正大小,因此没有 sizeof
永远不会导致 0
。
C 不允许空 struct
或 union
类型,并且数组 必须 的大小大于 0
。所以没有正确的 C 类型可以 return 0
.
这个答案依赖于未定义的行为;不使用
% cat so30681402.c #include <stdio.h> int main(void) { int za[0]; printf("sizeof array with no elements is %d.\n", (int)sizeof za); return 0; } % clang -std=c99 -pedantic -Weverything so30681402.c so30681402.c:4:12: warning: zero size arrays are an extension [-Wzero-length-array] int za[0]; ^ 1 warning generated. % ./a.out sizeof array with no elements is 0. %