Есть ли инструмент для распространения директив препроцессора? - PullRequest
0 голосов
/ 08 апреля 2020

Предположим, у меня есть следующее определение класса:

class foo
{
    #if bar
    private bool bar;
    #endif
    public void Do()
    {
        bar = false;
    }
}

Есть ли способ распространить панель переноса директивы препроцессора на все места, где используется панель? Вывод должен быть примерно таким:

class foo
{
    #if bar
    private bool bar;
    #endif
    public void Do()
    {
        #if bar
        bar = false;
        #endif
    }
}

1 Ответ

1 голос
/ 08 апреля 2020

Нет, в основном. Однако то, что вы можете сделать, это разделить ваш код на два файла и использовать partial class так, чтобы весь ваш код bar находился в одном изолированном файле:

partial class foo
{
    partial void OnBar(bool value);
    public void Do()
    {
        OnBar(false);
    }
}

и

#if bar
partial class foo
{
    private bool bar;
    partial void OnBar(bool value)
    {
        bar = value;
    }
}
#endif

Теперь основной файл *1011* ничего не знает о bar. Если символ компиляции bar не определен, поле bar не существует, а и OnBar метод - метод и его вызовы просто испаряются .

Это может быть полезно во многих сценариях ios, включая дополнительные уровни отладки кода или нацеливание на несколько платформ / сред / операционных систем (с указанными c файлами для разных целей) - без использования кода заполнено #if.

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