А не макрос для неблагоприятных условий


Мотивация

Я обычно стараюсь избегать использования ! в выражениях, потому что (мне) кажется, легко не заметить. Поэтому, я обычно просто пишется вместо, например: if (done == false) вместо if (!done). А что делает намерение более очевидным, он не читает очень плавно.

Код макроса

Для таких случаев я написал следующий макрос:

#define NOT(x) ((x) == false)

Внешние скобки позволяют использовать NOT(cond) без дополнительных скобок в if и сделать его менее подверженным ошибкам:

if NOT(condition) {
    ...
}

Полный пример использования макроса

#include <iostream>

#define NOT(x) ((x) == false)

bool successful() {return false;}

int main(int argc, char **argv)
{
    if NOT(successful()) {
        std::cout << "Warning! Self-destruction activated...\n";
    }

    const bool this_is_true = true;

    if NOT(this_is_true) {
        std::cout << "True is false.\n";
    }

    return EXIT_SUCCESS;
}

Проблемы

В то время как это работает, у меня есть некоторые опасения:

  1. От лучших практик или перспективу чистый код, это одобряется?

  2. Как макросы, как правило, рассматривается, или сообщали, в средства анализа кода? Мы рассматриваем возможность использования системы под названием литой-АИП для анализа кода, и, хотя я сильно в пользу этого, мне интересно, сколько томов практика нарушения мои отчеты будут.



932
6
c++
задан 13 апреля 2018 в 05:04 Источник Поделиться
Комментарии
2 ответа

Что-то вроде if (foo == false) всегда буду с неодобрением. Если вы ищите отрицание трудно найти, вы могли бы рассмотреть, используя not вместо этого (см. Этот для получения дополнительной информации).
Е. Г. if (not foo)

Из того что я видел макросы, как правило, рекомендуется, так как они, как правило, обфусцировать код и не безопасной.

22
ответ дан 13 апреля 2018 в 06:04 Источник Поделиться

почему не просто

#define NOT !

Было бы проще в использовании.

-4
ответ дан 14 апреля 2018 в 02:04 Источник Поделиться