как добавить метаданные / поведение во время компиляции к определенной функции - PullRequest
0 голосов
/ 01 июня 2019

Моя кодовая база - C ++ в NXP ARM M4 с пользовательской ОС C ++.

Существует определенная функция DWB() aka DangerWillRobinson(), которая при вызове может иметь неожиданнуюэффекты (которые действительны при правильном использовании).

DWB() может быть вызван очень глубоко вложенным способом, как в A()->B()->C()->D()->...->DWB()

Я хочу, чтобы автор любых функций, непосредственно иликосвенно, позвоните DWB(), чтобы узнать, что DWB() называется и Я хочу заставить их признать, что они знают, что DWB() называется.

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

Вот как я бы хотел, чтобы это работало:

void A()
{
    B();
}

Автор переходит к компиляции:

ОШИБКА: вызывается DWB ().Пожалуйста, подтвердите.

Затем автор думает о побочных эффектах вызова DWB() и не находит проблем.

void A()
{
    // some macro-thing ... ?
    B();
}

Если возможно, я не хочу, чтобы это выполняласьпроверять.Я думаю, что в теории это возможно.Если Base наследуется, я бы хотел, чтобы все возможные классы вызовов рассматривались;Это нормально, если ни один из них даже не создан, но не идеален.

ВОПРОС

Возможны ли эти метаданные / поведение функции во время компиляции?

1 Ответ

1 голос
/ 01 июня 2019

Возможны ли эти метаданные / поведение функции во время компиляции?

Нет, это не так.Могут быть доступны некоторые настраиваемые инструменты SCA (рассмотрим коммерческий высокоуровневый), но не с простой магией предварительной обработки c или магии программирования мета-шаблонов.


Я хочу автора любых функцийчто, прямо или косвенно, позвоните DWB(), чтобы знать, что DWB() вызывается, и я хочу заставить их признать, что они знают, что DWB() вызван.

Наименее навязчивый способсделать это, чтобы отметить DWB() функцию [[deprecated]].

Я просто полагаю, что вы предпочитаете выделять такую ​​склонную к ошибкам функцию в промежуточной дорожной карте и заменять ее чем-то более стабильным.

Самый быстрый способ, если вы уверены, что все условия правильного DWB() вызова - это применить группу вызовов assert() в начале этой функции.

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

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