Я читаю ALSA
учебник и столкнулся с некоторым недоразумением. В разделе 2. Basic PCM audio
приведен пример кода:
snd_pcm_t *pcm_handle; //uninitialized
snd_pcm_stream_t stream = SND_PCM_STREAM_PLAYBACK;
snd_pcm_hw_params_t *hwparams;
char *pcm_name;
pcm_name = strdup("plughw:0,0");
snd_pcm_hw_params_alloca(&hwparams); //macro, must be ok
if (snd_pcm_open(&pcm_handle, pcm_name, stream, 0) < 0) { // <--- !!HERE!!
fprintf(stderr, "Error opening PCM device %s\n", pcm_name);
return(-1);
}
Я не понимаю, почему это не UB. Мы передаем &pcm_handle
в унифицированном виде snd_pcm_open(&pcm_handle, pcm_name, stream, 0)
, который должен быть UB. Почему это нормально?