Странность с va_copy
Dec. 9th, 2018 09:28 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Вот такую странную картину я тут наблюдаю:
Debian testing, gcc 8.2.0. Имеется вот такой C-шный код:
В 64-битной системе компилятор кушает этот код без вопросов. В 32-битной ругается
error: ‘std_args’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
vfprintf(stderr, fmt, std_args);
Нет, я понимаю, что макросы для va_* могут быть реализованы по разному в зависимости от архитектуры процессора, но не до такой же степени...
Debian testing, gcc 8.2.0. Имеется вот такой C-шный код:
static void log (int elevel, const char *fmt, va_list args) { bool write_to_file, write_to_stderr, write_somewhere_else; va_list error_args, std_args; .... здесь вычисляем куда надо писать if (write_to_file && write_to_stderr) va_copy(std_args,args); .... некоторое количество кода, заведомо не меняющего флагов write_to if (write_to_file) { vfprintf(f,fmt, args); } if (write_to_stderr) { if (write_to_file) { vfprintf(stderr, fmt, std_args); } else { vfprintf(stderr,fmt,args); } ffush(stderr); }
В 64-битной системе компилятор кушает этот код без вопросов. В 32-битной ругается
error: ‘std_args’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
vfprintf(stderr, fmt, std_args);
Нет, я понимаю, что макросы для va_* могут быть реализованы по разному в зависимости от архитектуры процессора, но не до такой же степени...
no subject
Date: 2018-12-10 11:06 am (UTC)