У меня есть опыт работы с C/C++. Я обычно помещаю в свой код тяжелые утверждения, а в C или C++ нет гарантированного способа исключить вычисление подвыражений, которые являются параметром утверждения. Поэтому мне пришлось использовать макрос.
В C# у меня нет такого уровня поддержки макросов. Но у меня есть атрибут Conditional
. По моему опыту работы с C и C++, подвыражения нельзя исключить из-за побочных эффектов.
Например,
[Conditional(DEBUG)]
void func1(int a)
{
// Do something.
}
int func2()
{
// Will this be called?
}
func1(func2());
Если func2
все еще вызывается, я должен кодировать как isDebugMode() && func1(func2())
. Но именно этого я действительно хочу избежать. Поэтому я хочу знать, что атрибут Conditional
гарантирует удаление подвыражений или нет.
Если это не так, как лучше всего написать утверждение сборки отладки, которое будет полностью удалено при сборке выпуска?
AFAIK, это поддержка конкретного компилятора. Я хочу знать случай компилятора Mono.