C 定义带有 "or" 运算符混淆的宏

C Define macro with "or" operator confusion

这里一头雾水

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)

好像在 arm 上会被定义,看这里

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 时才为假(当 defined(NATIVE_EAS_KERNEL) && !defined(_16_BIT_SAMPLES) 为真时)。

NATIVE_EAS_KERNEL _16_BIT_SAMPLES !defined(NATIVE_EAS_KERNEL) || defined(_16_BIT_SAMPLES)
Not defined Not defined True
Not defined Defined True
Defined Not defined False
Defined Defined True