tôi nghĩ về điều kiện và trình biên dịch. Tôi đang lập trình một ứng dụng cho Arduino và vì vậy tôi cần ứng dụng càng nhanh càng tốt.Compiler: Nếu tình trạng luôn luôn là đúng/sai
Trong mã của tôi, tôi có điều này:
#define DEBUG false
...
if (DEBUG)
{
String pinName;
pinName = "Pin ";
pinName += pin;
pinName += " initialized";
Serial.println(pinName);
}
tôi tự hỏi nếu trình biên dịch không bao gồm mã (mã nhập nếu khối) trong tập tin nhị phân. Các điều kiện luôn luôn là sai, vì vậy chương trình không bao giờ đến đó.
Và từ phía bên kia. Điều gì xảy ra nếu DEBUG là đúng? Arduino có kiểm tra điều kiện hay trình biên dịch chỉ bao gồm phần thân của tập tin nhị phân không?
Tôi tìm thấy trang web này https://gcc.gnu.org/onlinedocs/gcc-3.0.2/cpp_4.html về chỉ thị #if, vì vậy tôi có thể viết lại mã để có các chỉ thị này thay vì "bình thường" nếu. Nhưng tôi muốn biết nếu tôi nên viết lại nó hoặc nếu nó sẽ lãng phí thời gian.
Trình biên dịch thông minh sẽ thực hiện tối ưu hóa và sẽ không bao gồm mã nhị phân nếu 'DEBUG' là' false'. –
'if (CONSTANT) {...}' rất dễ dàng cho trình biên dịch để tối ưu hóa. Tôi hy vọng rằng bất kỳ trình biên dịch tốt từ ít nhất 25 năm qua sẽ có thể loại bỏ nhánh có điều kiện. – Phylogenesis
Tôi muốn sử dụng '# if' /' # endif', ngay cả khi nó không tạo sự khác biệt trong nhị phân. Bằng cách đó, rõ ràng 'DEBUG' là gì. – LogicStuff