Tôi đã viết một thư viện bằng C mà giờ đây sẽ được sử dụng trong bảng mạch xử lý được nhúng. Tôi cần phải giảm bộ nhớ chân in như vậy đã đi một thay đổi kiểu trả về của một số chức năng từ int để char (chỉ được sử dụng để cờ lỗi).cảnh báo gcc đối với loại trả lại khác nhau
Thay đổi loại trả về nhưng không thay đổi biến trả lại không tạo ra cảnh báo. Có một số cách thiết lập này trong gcc như tôi muốn đảm bảo tôi đã bắt tất cả các trường hợp.
char processSomething (SomeType *something)
{
int result = 0;
...
do stuff
...
return result; /* no warning */
}
Cảm ơn
Tháng Sáu 19: Tôi đã thêm -Wconversion đó đã nêu bật một số điều thú vị. Hai câu hỏi với điều này. Một trong các hàm của tôi, tôi lấy một chuỗi ký tự hai ký tự và chuyển đổi sang thập phân bằng cách sử dụng
char decimal;
decimal = hexstring [0] - '0' << 4 + hexstring [1] - '0'; // for 0 to 9
nó than phiền về chuyển đổi từ int để char và từ những gì tôi có thể thu thập là '-' nhà khai thác, '+', và '< <' tất cả dường như ngầm chuyển đổi sang int. Đây có phải là chính xác hoặc tôi giải thích cảnh báo sai. Hoặc là có một cách tốt hơn để làm điều này?
Ngoài ra, khi sử dụng strtol vào một int (phàn nàn về 'long int' to 'int') nhưng tôi có thể đảm bảo giá trị sẽ không vượt quá kích thước ngắn gọn, có an toàn để định kiểu không? Như trong nó sẽ cắt ngắn thêm (và hy vọng không byte) của dài? Hay điều này phụ thuộc vào tính cuối cùng?
Cảm ơn
Giá trị trả về hàm sẽ nằm trong sổ đăng ký. Bạn đã không nói bộ xử lý nào, câu hỏi của bạn chỉ có ý nghĩa nếu đó là một 8-bit. –
Lưu ý rằng 'char' có thể được ký hoặc chưa ký! Tốt hơn chỉ định rõ ràng. Sử dụng tốt nhất 'uint8_t' hoặc' int8_t' từ 'stdint.h' Đặc biệt đối với các thiết bị nhúng, đây là cách được khuyến nghị. – Olaf
Tôi nghi ngờ làm điều này sẽ giúp bạn giảm thiểu việc sử dụng bộ nhớ. – HuStmpHrrr