Когда я делаю: less /usr/include/stdio.h
(который является только библиотекой C - ничто, чтобы сделать с C++),
Ясно __THROW
после довольно многих объявлений функции. Кроме того, в комментариях выше нескольких функций говорится, что 'Эта функция является возможной точкой отмены и поэтому не отмеченная с __THROW
'Для чего все это?
throw
предназначен, чтобы быть для обработки исключений..., но насколько я знаю, C не оказывает поддержки для нее.
Объясните.
Этот заголовок, вероятно, используется совместно компилятором C и C ++ этого поставщика. Вы смотрели, как __ THROW
определяется как?
Я подозреваю, что что-то вроде:
#ifdef __cplusplus
#define __THROW throw()
#else
#define __THROW
#endif
Или для фактических спецификаций:
#ifdef __cplusplus
#define __THROW(x) throw(x)
#else
#define __THROW(x)
#endif
Как вы можете видеть, в сборке C он не расширяется до нуля. В C ++ он делает то, что вы ожидаете. Это позволяет поставщикам повторно использовать один и тот же файл.
Чтобы придираться, это не совсем так: «(это всего лишь библиотека C - не имеет ничего общего с C ++)»
Стандартная библиотека C ++ включает возможность использовать стандартную библиотеку C. Фактический заголовок -
, где xxx
- это имя заголовка C. То есть, чтобы включить заголовок C
в C ++, вы делаете
. Так что это имеет отношение к C ++. :)
Вот почему вы видите код, который вы делаете. Дублирование заголовка для двух разных языков было бы кошмаром для обслуживания и чистоты.
Чтобы ответить на ваш другой вопрос относительно "Эта функция является возможной точкой отмены и поэтому не помечена __THROW": Это относится к многопоточности. Вы можете "отменить" поток, но на самом деле он не будет "отменен", пока не достигнет точки отмены. Дополнительная информация: http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_cancel.3.html