C#: прагма предупреждает необходимое восстановление?

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

https://github.com/eum602/Basic-testing-Examples-Using-NodeJS

Удачи.

43
задан Svish 28 July 2010 в 17:36
поделиться

3 ответа

Если Вы не восстанавливаете отключение, активно для остатка от файла.

Интересно это поведение не определено в спецификация языка . (см. раздел 9.5.8), Однако эти 9.5.1 разделов по символам Условной компиляции действительно указывают на это "до конца поведения файла"

, символ остается определенным, пока #undef директива для того же самого символа не обрабатывается, или пока конец исходного файла не достигнут.

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

45
ответ дан ShuggyCoUk 26 November 2019 в 23:06
поделиться

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

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

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

3
ответ дан Nir 26 November 2019 в 23:06
поделиться

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

#pragma warning disable 649
struct MyInteropThing
{
    int a;
    int b;
}
#pragma warning restore 649

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

Полю 'поле' никогда не присваивают и будет всегда иметь его значение по умолчанию 'значением'

, Но я не хочу, чтобы весь файл не был оставлен неконтролируемым.

2
ответ дан BJ Myers 26 November 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: