C ++ отмечает функцию как экспериментальную / не полностью реализованную - PullRequest
0 голосов
/ 04 августа 2020

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

Вариант n1 просто добавляет комментарий // Warning this thing is partially implemented and will break randomly Однако это не создает предупреждений во время компиляции, поэтому я не фанат.

Вариант n2 должен использовать [[deprecated("reason")]] который имеет то преимущество, что вызывает предупреждения компиляции, но вводит в заблуждение, функция не была объявлена ​​устаревшей, это фактически противоположность устареванию, это WIP и, возможно, однажды будет полностью реализован.

Есть ли альтернативы?

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Единственное, что в стандарт C ++ для этого, - это атрибут [[deprecated("message")]].

GNU имеет нестандартный Атрибут функции для warning сообщений:

предупреждение («сообщение») Если этот атрибут используется в объявлении функции и вызов такой функции не устранен путем исключения мертвого кода или других оптимизаций, будет диагностировано предупреждение, которое будет включать сообщение . Это полезно для проверки времени компиляции, особенно вместе с __builtin_constant_p и встроенными функциями. Хотя можно определить функцию с помощью сообщения в разделе .gnu.warning*, при использовании этого атрибута проблема будет диагностирована раньше и с указанием точного местоположения вызова даже при наличии встроенных функций или при отсутствии отладочной информации.

1 голос
/ 04 августа 2020

Атрибут [[deprecated]] - это именно то, для чего он предназначен (выделено мной):

https://en.cppreference.com/w/cpp/language/attributes

[устарело]

[устаревшее ("причина")]

указывает, что использование имени или объекта, объявленного с этим атрибутом , разрешено, но не рекомендуется по какой-то причине

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

Предостережение: MSV C нарушает стандарт и запускает компилятор ошибка (из-за того, что флаг SDL включен по умолчанию) вместо предупреждения.

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