Cho mình hỏi signed main với int main khác gì nhau vậy? (c++)
Đây là một câu hỏi rất hay và thể hiện em có sự quan sát tỉ mỉ khi học lập trình. Để hiểu rõ sự khác biệt (hay đúng hơn là sự tương đồng) giữa signed main và int main, thầy sẽ giải thích cho em từng bước theo kiến thức trong chương trình Tin học lớp 10 của chúng ta nhé.
Về bản chất, int main() và signed main() là GIỐNG HỆT NHAU về mặt chức năng trong ngôn ngữ C++. Chương trình của em sẽ chạy y như nhau dù em dùng cách viết nào.
Để hiểu tại sao chúng lại giống nhau, chúng ta hãy cùng phân tích nhé:
Bước 1: Hiểu về kiểu dữ liệu int
Như chúng ta đã học, int là kiểu dữ liệu dùng để lưu trữ các số nguyên (ví dụ: -5, 0, 100).
Trong C++, các kiểu số nguyên như int có hai biến thể chính:
- signed (có dấu): Có thể lưu được cả số âm, số 0 và số dương.
- unsigned (không dấu): Chỉ có thể lưu được số 0 và số dương.
QUY TẮC QUAN TRỌNG: Khi chúng ta chỉ viết int, C++ sẽ mặc định hiểu đó là signed int (số nguyên có dấu). Viết int là một cách viết tắt cho signed int.
Ví dụ:
int soA;
signed int soB;
Hai dòng code trên hoàn toàn tương đương, đều khai báo một biến số nguyên có thể lưu giá trị âm hoặc dương.
Bước 2: Áp dụng vào hàm main
Hàm main là điểm bắt đầu của mọi chương trình C++. Phần đứng trước chữ “main” (ví dụ: int) chính là kiểu dữ liệu trả về của hàm.
- Khi em viết int main(): Em đang khai báo hàm main sẽ trả về một giá trị kiểu int. Theo quy tắc ở Bước 1, int chính là signed int. Vì vậy, hàm main sẽ trả về một số nguyên có dấu.
- Khi em viết signed main(): Em đang khai báo một cách tường minh (rõ ràng) hơn rằng hàm main sẽ trả về một giá trị kiểu signed int, tức là một số nguyên có dấu.
Em thấy không? Cả hai cách viết đều dẫn đến cùng một kết quả: hàm main trả về một giá trị kiểu số nguyên có dấu.
Vậy tại sao Sách giáo khoa và mọi người đều dùng int main()?
Đây là một câu hỏi rất thực tế. Mặc dù signed main() không sai, nhưng cộng đồng lập trình viên C++ và các tài liệu chính thống (bao gồm Sách giáo khoa của chúng ta) đều thống nhất sử dụng int main() vì những lý do sau:
- Là quy ước chung: Đây là cách viết tiêu chuẩn, được mọi người công nhận và sử dụng rộng rãi. Khi làm việc nhóm hoặc đọc code của người khác, việc tuân thủ quy ước chung giúp code dễ đọc và dễ hiểu hơn.
- Ngắn gọn: Viết int main() ngắn hơn signed main(). Lập trình viên luôn yêu thích sự ngắn gọn và rõ ràng.
TỔNG KẾT
- Về mặt kỹ thuật: int main() và signed main() là một, không có gì khác biệt.
- Về mặt thực hành: Chúng ta luôn luôn nên sử dụng int main() vì đó là quy ước chung, chuyên nghiệp và được sử dụng trong Sách giáo khoa.
Hy vọng phần giải thích của thầy dễ hiểu và giúp em nắm vững kiến thức này.
Chúc em học tốt
• Signed dịch nôm na ra là có dấu (kiểu có dấu âm -). Ngược lại với signed là unsigned (không dấu), chỉ lưu được các giá trị dương.
• Trường hợp hay gặp signed main() là khi người code có #define int long long.
• Signed có khoảng giá trị bằng với int. Hay có thể nói signed là kiểu dữ liệu int nhưng cách viết dài hơn thôi.
• Vì compiler không chịu để kiểu dữ liệu trả về là long long cho main() nên phải dùng signed.
• Bonus: unsigned vì không cần sử dụng bit đầu tiên để đánh dấu giá trị âm dương nên gần như là gấp đôi int nếu tính số dương.