Почему делают я вижу, ДОБАВЛЯЮТ библиотеку C?

Когда я делаю: less /usr/include/stdio.h (который является только библиотекой C - ничто, чтобы сделать с C++),

Ясно __THROW после довольно многих объявлений функции. Кроме того, в комментариях выше нескольких функций говорится, что 'Эта функция является возможной точкой отмены и поэтому не отмеченная с __THROW'Для чего все это?

throw предназначен, чтобы быть для обработки исключений..., но насколько я знаю, C не оказывает поддержки для нее.

Объясните.

37
задан GManNickG 21 March 2010 в 08:59
поделиться

2 ответа

Этот заголовок, вероятно, используется совместно компилятором 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 ++. :)

Вот почему вы видите код, который вы делаете. Дублирование заголовка для двух разных языков было бы кошмаром для обслуживания и чистоты.

42
ответ дан 27 November 2019 в 04:51
поделиться

Чтобы ответить на ваш другой вопрос относительно "Эта функция является возможной точкой отмены и поэтому не помечена __THROW": Это относится к многопоточности. Вы можете "отменить" поток, но на самом деле он не будет "отменен", пока не достигнет точки отмены. Дополнительная информация: http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_cancel.3.html

5
ответ дан 27 November 2019 в 04:51
поделиться