Giả sử tôi đang sử dụng phiên bản hiện đại GCC
để biên dịch chương trình C. Hơn nữa, hãy xem xét rằng chương trình của tôi chứa các nhánh cũ, nhưng tôi rất giống đoạn mã chết trong những nhánh cũ để được biên dịch và trình bày trong chương trình cuối cùng. Hãy xem xét các chương trình sau đây:GCC có thể được hướng dẫn không loại bỏ mã chết không?
int main(int argc, char** argv) {
int a = 0;
goto skip;
a = -1;
skip: ;
return a;
}
Rõ ràng, nếu tôi sử dụng GCC
với các thiết lập tối ưu hóa mặc định, việc chuyển nhượng thứ hai sẽ không bao giờ làm cho nó vào chương trình chính thức, như trình biên dịch có thể dễ dàng nói rằng nó sẽ không bao giờ được thực thi. Giả sử tôi không muốn điều này xảy ra.
Trong GCC
, có một số lá cờ mà vọc trong nước với mã chết (đáng chú ý nhất -fdce
), và tôi có thể chọn để tắt một cách rõ ràng những khi gọi GCC cho phù hợp:
-fno-dce
-fno-dse
-fno-tree-dce
-fno-tree-dse
Theo như tôi có thể nói , điều này sẽ hướng dẫn GCC
không gây rối với nhiệm vụ thứ hai. Tuy nhiên, các mã liên quan không bao giờ có vẻ làm cho nó vào chương trình của tôi.
Tại sao GCC
nhấn mạnh việc xóa mã đã chết và có cách hướng dẫn GCC không để loại bỏ nhiệm vụ thứ hai không?
Phiên bản gcc bạn đang sử dụng ? – anatolyg
Tôi nhận thức được 'dễ bay hơi ', nhưng tôi tò mò muốn biết liệu điều này có thể thực hiện được với GCC hay không. Đối với GCC tôi đang sử dụng phiên bản 4.8.3, nhưng tôi muốn được quan tâm để biết nếu có một giải pháp bất kỳ phiên bản nhất định! – Caterpillar
Bỏ qua nhận xét của tôi. Dễ bay hơi không ngăn GCC bỏ qua nhiệm vụ. –