Я понимаю основы для директив препроцессора #if #endif в C, в зависимости от того, какое выражение оценивается как истина, код завершения внутри #if будет скомпилирован, м в настоящее время обучение Portaudio (я делаю приложение VOIP для школы) и я глядя на некоторые из их примеров, и я запутаться на малом участке#if #endif preprocessing Directive, PortAudio
/* 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"
wont the #elif 1 всегда пропускается причина, если каким-то образом #if 1 (#if true) оценивается как false, wont #elif 1 также вычисляется как false?
вопрос 2 не 1 оценить true и 0 на false? поэтому wont #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 можно рассматривать как массив символов/Unsigned Characters (без необходимости конвертировать поплавки в символы, а затем обратно) для записи/чтения из сокета?
Я получил эту часть, я предположил, что она работает как инструкция if в java/c/C++ и т. Д. Что мне интересно, обычно #if 1 всегда оценивается/скомпилируется, поскольку это по существу #if true? то остальные из них выбрасываются? –
Конечно, это всегда будет оценено, программист, вероятно, сделал это так, чтобы он мог изменить эти константы, чтобы выбрать разные условия. – ouah
У меня есть то, о чем я думал, #elif 1 просто заставило меня задаться вопросом, почему на земле было бы 2 единицы, и я сделал это более сложным, что это действительно должно было быть Спасибо! последний вопрос Я работаю с сокетами, должен ли я использовать типы данных Char/Unsigned Char (PortAudio не уверен, если вы знакомы, выделите память, скажем, 2048 (размер моего пакета) байтов на некоторый указатель SAMPLE, а затем с этими данными указатель Я собираюсь отправить его через сокет) –