C Определить макрос с путаницей оператора «или»

Запутался здесь

https://android.googlesource.com/platform/external/sonivox/+/refs/tags/android-12.1.0_r2/arm-wt-22k/lib_src/eas_wtengine.c#168

#if !defined(NATIVE_EAS_KERNEL) || defined(_16_BIT_SAMPLES)

Вроде на руке определится, см. здесь

https://android.googlesource.com/platform/external/sonivox/+/refs/tags/android-12.1.0_r2/arm-wt-22k/Android.bp#121

Но все сборки имеют

https://android.googlesource.com/platform/external/sonivox/+/refs/tags/android-12.1.0_r2/arm-wt-22k/Android.bp#66

Так что это должно быть верно как на руке, так и на других, то есть x86_64, верно?

Он будет не определен только тогда, когда первое условие не будет выполнено, а второе, что означает отсутствие флага EAS_NATIVE_KERNEL и флага _16_BIT_SAMPLES?

Когда вы говорите «определено», вы имеете в виду «истинно»? !defined(NATIVE_EAS_KERNEL) || defined(_16_BIT_SAMPLES) будет ложным только тогда, когда NATIVE_EAS_KERNEL определено, а _16_BIT_SAMPLES не определено.

ikegami 31.03.2022 21:53

Спасибо. Да, я имел в виду, что определено, правда, что блок ниже будет использоваться

dev 31.03.2022 21:56
0
2
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

!defined(NATIVE_EAS_KERNEL) || defined(_16_BIT_SAMPLES) будет ложным только тогда, когда NATIVE_EAS_KERNEL определено, а _16_BIT_SAMPLES не определено (когда defined(NATIVE_EAS_KERNEL) && !defined(_16_BIT_SAMPLES) истинно).

NATIVE_EAS_KERNEL_16_BIT_SAMPLES!defined(NATIVE_EAS_KERNEL) || defined(_16_BIT_SAMPLES)
Не определеноНе определеноИстинный
Не определеноОпределенныйИстинный
ОпределенныйНе определеноЛОЖЬ
ОпределенныйОпределенныйИстинный

Другие вопросы по теме