2014-06-11 27 views
5

Tôi đang biên dịch ffmpeg cho win32 bằng cách sử dụng trình biên dịch Microsoft cl. Tôi cần phải biên dịch nó mà không có bất kỳ tối ưu hóa, vì vậy bổ sung cấu hình --extra-CFLAGS = -Od"Biên dịch FFMPEG không biên dịch tối ưu hóa

Compilation đi tốt, nhưng có một vài nơi như this:..

cuối 3 IFS

Mã biên dịch, nhưng không liên kết bởi vì các cuộc gọi như ff_sbrdsp_init_arm (s), không bị loại bỏ bởi trình biên dịch Tất nhiên mọi thứ đều tốt khi biên dịch với tối ưu hóa, sau đó trình biên dịch sẽ xóa tất cả nếu (0) s.

Có tại sao nếu (0) được sử dụng thay vì #if 0 của preprocessor?

Có mẹo nào ẩn đằng sau điều này không?

Trả lời

3

Một lợi thế của if (0) C; qua giải pháp #if hoặc #ifdef là mã vẫn được kiểm tra kiểu bởi trình biên dịch. Nếu ai đó thay đổi nguyên mẫu của một trong các hàm được gọi trong C, trình biên dịch sẽ cảnh báo rằng các callite cần phải được điều chỉnh, ngay cả khi người thực hiện việc biên dịch không sử dụng cấu hình này.

Đối với vấn đề thực tế của bạn trong việc biên dịch mã với nền tảng biên dịch không loại bỏ các cuộc gọi chết này, bạn có thể thay đổi chúng một cách an toàn sang phiên bản tiền xử lý (*). Tuy nhiên, có lẽ bạn nên giải thích lý do tại sao bạn phải biên dịch mà không cần tối ưu hóa. Có lẽ nó sẽ được cho phép và có thể chỉ cho phép tối ưu hóa loại bỏ loại mã chết này.

(*) Tại đây, tôi tránh né một cách tinh tế để đề xuất cụ thể #if ARCH_ARM hoặc #ifdef ARCH_ARM, nhưng điều này làm bạn bất tiện. Hãy nhận biết rằng chúng khác nhau. Nếu ARCH_ARM luôn được xác định là 0 hoặc 1, hãy sử dụng #if ARCH_ARM. Nếu nó được xác định hay không, hãy sử dụng #ifdef. Nếu macro được thiết kế để hoạt động bên trong if (…), đó là trường hợp cũ.

+0

Có, nếu tôi chỉ biết cách bật tối ưu hóa loại bỏ mã chết nhưng không có tối ưu hóa khác ... BTW. Tôi cần nó để gỡ lỗi - từng bước trong trình gỡ lỗi –

+0

@Kamil_H Sẽ rất khó để xử lý việc thay thế tự động, nhưng bạn ít nhất có thể sử dụng regexp 'if ([A-Z _] *)' để tìm tất cả các trang web có khả năng cần sửa đổi (điều này sẽ tìm tất cả các điều kiện 'if' chỉ bằng chữ in hoa và dấu gạch dưới). –

+0

OK, cảm ơn lời khuyên, nhưng câu hỏi của tôi hơi khác: Có bất kỳ lý do nào cho những ifs này không. Có vẻ như ai đó đã cố tình làm vậy. –

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