2011-11-28 50 views
10

Làm cách nào để biên dịch chương trình C mà không trải qua bất kỳ tối ưu hóa nào bằng gcc/g ++?Cách biên dịch chương trình C mà không cần bất kỳ tối ưu hóa nào

+0

Nếu bạn không tìm kiếm trình biên dịch, bạn có thể đang tìm cách khai báo biến (s) 'bay hơi'. – user786653

+0

Tại sao bạn muốn chúng bị tắt? Bạn có một số lý do để tin rằng tối ưu hóa là 1) được kích hoạt, và 2) gây ra vấn đề cho bạn? Rất hiếm khi tối ưu hóa để gây ra sự cố với mã được viết chính xác. Tuy nhiên, thường hữu ích khi sử dụng -O0 kết hợp với -ggdb để gỡ lỗi. –

Trả lời

13
gcc main.c 

hoặc

g++ main.cpp 

theo mặc định nó không làm bất cứ việc tối ưu. Chỉ khi bạn chỉ định -O1, -O2, -O3, etc..., nó có tối ưu hóa không.

Hoặc bạn có thể sử dụng công tắc -O0 để làm cho nó rõ ràng.

5

Bạn không nên nhận bất kỳ tối ưu hóa nào trừ khi bạn yêu cầu chúng qua cờ -O. Nếu bạn cần hoàn tác một số giá trị mặc định do hệ thống xây dựng của bạn cung cấp, -O0 sẽ làm điều đó cho bạn, miễn là đó là cờ -O cuối cùng trong dòng lệnh.

1

Sử dụng gcc, vượt qua trong cờ: -O 0.

1

Sử dụng trình biên dịch chuyển -O0.

11

Sử dụng -O0 là gần nhất tôi biết, tuy nhiên, không giống như các thư trả lời khác, điều này không có nghĩa là tối ưu hóa bằng 0. Bạn có thể đếm số lượng tối ưu hóa kích hoạt cho các cấp độ tối ưu hóa gcc khác nhau như thế này (đây là 4.8.2 gcc):

$ gcc -Q -O0 --help=optimizers | grep enabled | wc -l 
52 
$ gcc -Q -O1 --help=optimizers | grep enabled | wc -l 
80 
$ gcc -Q -O2 --help=optimizers | grep enabled | wc -l 
110 
$ gcc -Q -O3 --help=optimizers | grep enabled | wc -l 
119 

Vì vậy, tại -O0, có 52 tối ưu hóa kích hoạt. Tôi cho rằng người ta có thể vô hiệu hóa từng người một, nhưng tôi chưa từng thấy điều đó.

Lưu ý rằng các trang man gcc nói:

-O0 Reduce compilation time and make debugging produce the expected results. This is the default. 

Nó không hứa hẹn không tối ưu.

Tôi không phải là nhà phát triển gcc, nhưng tôi đoán họ sẽ nói rằng các tối ưu hóa -O0 đã trở thành tiêu chuẩn đến mức chúng hầu như không thể được gọi là tối ưu hóa nữa, thay vào đó là "tiêu chuẩn". Nếu đó là sự thật, có một chút khó hiểu, vì gcc vẫn có chúng trong danh sách trình tối ưu hóa. Tôi cũng không biết lịch sử đủ tốt: có lẽ cho một phiên bản trước -O0 thực sự có nghĩa là không tối ưu hóa ...

Các vấn đề liên quan