Независимо от любых потенциальных ловушек это использование, я нашел этот фрагмент кода в одном из заголовочных файлов FFmpeg:C++ из C99 временной локальной переменной массива
/**
* Convenience macro, the return value should be used only directly in
* function arguments but never stand-alone.
*/
#define av_err2str(errnum) \
av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum)
Мой вопрос о (char[AV_ERROR_MAX_STRING_SIZE]){0}
.
Он по существу создает массив char[]
в стеке и передает его адрес стека как char*
, который должен быть заполнен на месте av_make_error_string()
.
Это синтаксис C99.
Имеет ли pre-C++ 11 эквивалентный синтаксис?
Будет ли это также работать с C++ 11?
Используйте различные настройки C++ на ideone.com и попробуйте сами? http://ideone.com/ – kfsone
Возможный дубликат [C++ Compound literal] (http://stackoverflow.com/questions/9436480/c-compound-literal) –