Я думаю об условных обозначениях и компиляторах. Я программирую приложение для Arduino, поэтому мне нужно, чтобы приложение было как можно быстрее.Компилятор: что, если условие всегда верно/false
В моем коде я это:
#define DEBUG false
...
if (DEBUG)
{
String pinName;
pinName = "Pin ";
pinName += pin;
pinName += " initialized";
Serial.println(pinName);
}
мне интересно, если компилятор не включает код (код, если блок) в бинарном файле. Условия всегда ложные, поэтому программа никогда не идет туда.
И с другой стороны. Что делать, если DEBUG верен? Проверяет ли Arduino условие или компилятор включает только тело if в двоичном файле?
Я нашел этот сайт https://gcc.gnu.org/onlinedocs/gcc-3.0.2/cpp_4.html о директиве #if, поэтому я могу переписать код, чтобы иметь эти директивы вместо «нормального», если. Но я хотел бы знать, следует ли мне переписать его или если это будет пустой тратой времени.
Умный компилятор выполнит оптимизацию и не будет включать код в двоичном формате, если 'DEBUG' является' false'. –
'if (CONSTANT) {...}' очень просто для компилятора для оптимизации. Я ожидал бы, что любой достойный компилятор, по крайней мере, за последние 25 лет, сможет удалить условную ветвь. – Phylogenesis
Я бы использовал '# if' /' # endif', даже если это не влияет на двоичный файл. Таким образом, понятно, что такое DEBUG. – LogicStuff