sizeof运算符是否有可能返回0?

时间:2015-06-06 09:53:47

标签: c java-native-interface sizeof

我需要从C返回值sizeof(some_t)到Java。

JNIEXPORT jint JNICALL blar(blar) {
#ifndef some_t
  return ?;
#else
  return sizeof(some_t);
#endif

正如您所看到的,我必须为类型为甚至未定义的的情况返回一些值。那么这个案例的最佳价值是什么? 0-1?这就是为什么我在询问是否有任何sizeof操作在任何非错误情况下返回0的情况。

2 个答案:

答案 0 :(得分:3)

这个答案依赖于未定义的行为;不要使用

% 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.

%

答案 1 :(得分:2)

C中的对象始终具有正尺寸,因此sizeof永远不会导致0

C不允许空structunion类型,而且数组的大小必须大于0。因此,没有正确的C类型可以返回值0