gpt4 book ai didi

c - #if#endif 预处理指令,PortAudio

转载 作者:行者123 更新时间:2023-11-30 15:27:05 24 4
gpt4 key购买 nike

我了解 C 语言中 #if#endif 预处理器指令的基础知识,因为根据哪个表达式计算结果为 true,#if 中的后续代码将被编译,但是我目前正在学习 portaudio(我正在为学校制作一个 VOIP 应用程序),我正在查看他们的一些示例,我对一小部分感到困惑

/* Select sample format. */
#if 1
#define PA_SAMPLE_TYPE paFloat32
typedef float SAMPLE;
#define SAMPLE_SILENCE (0.0f)
#define PRINTF_S_FORMAT "%.8f"
#elif 1
#define PA_SAMPLE_TYPE paInt16
typedef short SAMPLE;
#define SAMPLE_SILENCE (0)
#define PRINTF_S_FORMAT "%d"
#elif 0
#define PA_SAMPLE_TYPE paInt8
typedef char SAMPLE;
#define SAMPLE_SILENCE (0)
#define PRINTF_S_FORMAT "%d"
#else
#define PA_SAMPLE_TYPE paUInt8
typedef unsigned char SAMPLE;
#define SAMPLE_SILENCE (128)
#define PRINTF_S_FORMAT "%d"
#endif

首先想到的问题是

#if 1
#define PA_SAMPLE_TYPE paFloat32
typedef float SAMPLE;
#define SAMPLE_SILENCE (0.0f)
#define PRINTF_S_FORMAT "%.8f"
#elif 1
#define PA_SAMPLE_TYPE paInt16
typedef short SAMPLE;
#define SAMPLE_SILENCE (0)
#define PRINTF_S_FORMAT "%d"

#elif 1 不会总是被跳过,因为如果不知何故 #if 1 (#if true) 计算结果为 false,#elif 1 也不会计算为 false?

问题21 不是评估为真,0 评估为假吗?那么 #elif 0 不会总是评估为 false 吗?也就是说,这并不重要?

问题3我将通过套接字发送这些样本,跳过此预处理器指令并仅使用代码

#define PA_SAMPLE_TYPE  paInt8
typedef char SAMPLE;
#define SAMPLE_SILENCE (0)
#define PRINTF_S_FORMAT "%d"

#define PA_SAMPLE_TYPE  paUInt8
typedef unsigned char SAMPLE;
#define SAMPLE_SILENCE (128)
#define PRINTF_S_FORMAT "%d"
#endif

这样会更好吗,因为我的 SAMPLE_TYPE/SAMPLE 可以被视为字符/无符号字符数组(不必将 float 转换为字符然后再转换回来)以便从套接字写入/读取?

最佳答案

你需要明白的是,在一系列#if/#elif/#else之间,只会选择一个条件:

此处选择

#if:

#if 1
// only this one will be selected
#elif 1
#else
#endif
此处选择

#elif:

#if 0
#elif 1
// only this one will be selected
#else
#endif
此处选择

#else:

#if 0
#elif 0
#else
// only this one will be selected
#endif

关于c - #if#endif 预处理指令,PortAudio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27197414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com