Какие фигурные скобки внутри вызова функции означают в C? - PullRequest
2 голосов
/ 21 ноября 2019

Я попытался решить упражнение 1-24 в книге K & R C, в которой вам нужно создать программу, которая может обнаруживать основные синтаксические ошибки (несбалансированные скобки, скобки и т. Д.). Я провел несколько тестов, чтобы отладить его в исходных файлах C, разбросанных по моей системе. Моя программа обнаружила ошибку, когда встретила эту строку в файле:

av_opt_set_q  (abuffer_ctx, "time_base", (AVRational ){ 1, INPUT_SAMPLERATE }, AV_OPT_SEARCH_CHILDREN);

Я сделал предположение, что каждый раз, когда встречаются регулярные фигурные скобки (внешние комментарии, двойные кавычки), скобки и скобки должны бытьсбалансировано. Это не так, как показала эта ошибка. К сожалению, я не могу найти, что это значит. Спасибо за вашу помощь.

1 Ответ

6 голосов
/ 21 ноября 2019

Этот

 (AVRational ){ 1, INPUT_SAMPLERATE }

является составным литералом . Подробнее об этом здесь .

Из C11, глава §6.5.2.5

Постфиксное выражение, которое состоит из имени типа в скобках, за которым следуетзаключенный в скобки список инициализаторов является составным литералом. Он предоставляет неназванный объект, значение которого задается списком инициализаторов.

Тем не менее, я не вижу, как скобки здесь не сбалансированы. Это правильный синтаксис, и ваш инструмент должен учитывать это при принятии решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...