размер хранилища не постоянный при использовании offsetof и включая termios.h с android ndk

Я сталкиваюсь с необычной ошибкой при компиляции этого

#include 
#include 
struct Test {
    int a;
    int b;
};
void test() {
    static int test_array[(offsetof(struct Test,a)) > 0 ? 2 : 1];
}

с arm-linux-androideabi-gcc -c:

test.c:8:13: error: storage size of 'test_array' isn't constant

Странная вещь в этом, когда я удаляю

#include 

все это компилируется без ошибок. Кроме того, когда я использую gcc, установленный в моей системе ubuntu, он не жалуется на независимость от termios.h. Ayone любая идея почему?

Справочная информация. Я пытаюсь скомпилировать компилятор ghc (glasgow haskell) и crosscompiler, и hs2hsc не работает в этой ситуации.

1
добавлено
Просмотры: 2
nl ja de
@unwind: Действительно, благодаря вашему adivce, который я знаю сейчас: Когда termios.h не включен, __builtin_offsetof используется, когда с termios.h "(((size_t) & ((struct Test *) 0) -> a))" используется. Разница заключается в «stddef.h» в зависимости от __compiler_offset of beeing. То, что я нахожу странным, заключается в том, что termios.h влияет на это, даже когда он включен после stddef.h. Я не могу найти ссылку на __compiler_offsetof или offsetof где угодно, но в stddef.h.
добавлено автор Nathan, источник
Как всегда в таких вопросах, прочитайте выходные данные перед процессором . Звучит так, как будто termios.h уничтожает либо sizeof , либо offsetof , но почему это так, я не знаю.
добавлено автор unwind, источник

Ответов нет

0