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 不允许空 structunion 类型,并且数组 必须 的大小大于 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.

%