Неизвестное выражение C - PullRequest
       1

Неизвестное выражение C

2 голосов
/ 03 сентября 2010

Я наткнулся на следующую строку в примере программы и не знаю, что это такое. Я представляю, что это вызов функции, но я не уверен:

(void) pthread_mutex_init(&bottleneck, &mxattr);    

Если это вызов функции, почему ему предшествует (void)? Я никогда не видел этого раньше. Вот строка в большем контексте:

attr_init(pthread_process, pthread_scope, stacksize);    
(void) pthread_mutex_init(&bottleneck, &mxattr);    
barrier_init(&setup_barrier, (2 * ntables) + 1);    

Спасибо за помощь. Вся программа взята из этого документа Solaris (Приложение D)

Ответы [ 4 ]

7 голосов
/ 03 сентября 2010

Это нормальный вызов функции. Часть (void) просто указывает, что функция возвращает значение, и с этим ничего не будет сделано. Удалить любые предупреждения о неиспользованных возвращаемых значениях.

См. приведение неиспользуемых возвращаемых значений в void .

4 голосов
/ 03 сентября 2010

POSIX Threads

Конкретный вызов - pthread_mutex_init - возвращает int. Приведение к void, вероятно, сделано для того, чтобы избежать конкретного предупреждения о том, что возвращаемое значение игнорируется во время компиляции или статического анализа кода.

Обновление : Как @Jack Kelly прокомментировал другой ответ, любой хороший инструмент статического анализа просто проигнорирует это приведение и продолжит выдавать предупреждение. Статический анализ должен контролироваться с помощью отдельных конкретных аннотаций, а не с помощью языковых конструкций, которые могут повлиять на вывод компилятора.

1 голос
/ 03 сентября 2010

Да, это вызов функции. Функция pthread_mutex_init() инициализирует мьютекс, используемый для предотвращения засорения несколькими потоками какого-либо общего ресурса.

Функция возвращает int, (void) указывает, что мы намеренно игнорируем возвращаемое значение. Он останавливает компилятор, жалующийся на неиспользуемые возвращаемые значения.

1 голос
/ 03 сентября 2010

Это вызов функции с явным приведением результата к void. Это просто стиль разработки, который намекает как компилятору, так и тем, кто читает этот код, что вызов функции фактически возвращает что-то, что намеренно игнорируется. В этом примере функция pthread_mutex_init возвращает целое число. Некоторые компиляторы выдают предупреждение, если вы вызываете функцию, отмеченную атрибутом warn_unused_result .

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