Khi nghi ngờ, hãy kiểm tra đầu ra của trình lắp ráp. Ví dụ: viết một đoạn mã nhỏ, tối thiểu, tức là như thế này
#import <Cocoa/Cocoa.h>
void test() {
CGRect r = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
NSLog(@"%f", r.size.width);
}
Sau đó, biên dịch nó sang trình hợp ngữ với -S
tùy chọn.
gcc -S test.m
Lưu đầu ra của trình hợp dịch trong test.s
tệp và xóa .0f
khỏi các hằng số và lặp lại lệnh biên dịch. Sau đó, thực hiện một diff
trong số mới test.s
và trước đó. Hãy nghĩ rằng điều đó sẽ cho thấy nếu có bất kỳ sự khác biệt thực sự nào. Tôi nghĩ rằng quá nhiều người có tầm nhìn về những gì họ nghĩ rằng trình biên dịch làm, nhưng vào cuối ngày, người ta nên biết cách xác minh bất kỳ lý thuyết nào.