配列が空の場合、ARRAY_SIZEは未定義の動作を返しますか?我々はsizeof((X)[0])
配列が空の場合、ARRAY_SIZEは未定義の動作を返しますか?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef ARRAY_SIZE
#define ARRAY_SIZE(X) sizeof((X))/sizeof((X)[0])
#endif
struct ka {
int a;
int b;
};
int main(void)
{
struct ka k[] = {};
printf("%d\n", ARRAY_SIZE(k));
}
これはC++ではありません。指定されていないバウンドの配列の場合、空の初期化子は禁止されています。 – mpiatek
'sizeof(k [0])'は実際にはどのメモリにもアクセスしないので、これはUBではありません。これは 'sizeof(ka)'と全く同じです – rustyx