Sự Khác Biệt Giữa Main(), Void Main(), Int Main(), Int ... - For Better Life!
Có thể bạn quan tâm
Skip to content - Home
- About
Sự khác biệt giữa main(), void main(), int main(), int main(void), int main(int argc, char *argv[]).
Posted on 12/01/2011 by thanhcuong1990![]()
Khi học lập trình C, C++ bạn thường thắc mắc hàm chính của chương trình là void main(), main(), int main() hay int main(int argc, char * argv[]). Vậy điểm khác nhau ở mỗi cách viết đó là gì? Bài viết này sẽ cố gắng giải thích rõ sự khác biệt nói trên.
C và C++ có những tiêu chuẩn khác nhau khi sử dụng hàm main(). Do đó chúng ta sẽ tìm hiểu chi tiết một cách riêng biệt.
1. Đối với ngôn ngữ C (For C)
– Theo như tiêu chuẩn C89 thì hàm chính của chương trình được viết là main().
Với cách viết này bạn không có yêu cầu truy cập các đối số của dòng lệnh (command line arguments).
– Nhưng các tiêu chuẩn C99 lại khuyến khích dùng 2 cách viết sau:![]()
int main ( void ) int main ( int argc, char *argv[] )
Hoặc cũng có một số cách viết khác, như thay thế int bằng một kiểu typedef được định nghĩa như int, hoặc argv có thể được viết là char **argv …
argc và argv là những định danh có thể thay đổi nếu bạn muốn, nhưng cách viết argc/argv là một quy ước chung mà một số trình biên dịch cung cấp sẵn cho bạn.
– Kiểu trả về của hàm main() phải luôn là một kiểu int, điều này cho phép một mã lệnh trả về được chuyển đến Invoker.
– Theo tiêu chuẩn C89 thì khai báo return ở cuối hàm main() là cần thiết. Trong khi đó theo tiêu chuẩn C99, nếu không có khai báo return, thì return 0 sẽ được thực hiện ngầm định. Tuy nhiên theo tôi thì khai báo return ở cuối chương trình là một thoái quen tốt khi lập trình, ngay cả khi bạn không khai báo nó vẫn có thể được thực hiện một cách ngầm định (implied).
2. Đối với C++ (For C++)
Dưới đây là những cách sử dụng được chấp nhận:![]()
int main ( int argc, char *argv[] )int main ()
– Cách viết đầu tiên cũng giống như các quy ước trong C99.
– Cách viết thứ 2 được sử dụng khi bạn không yêu cầu truy cập tới các đối số dòng lệnh (command line arguments), và tương đương với main(void) trong tiêu chuẩn C99.
– Xin nhắc lại, kiểu trả về phải luôn luôn là một kiểu int, và hàm sẽ trả về giá trị không ở cuối. Mặc dù đây không phải là một yêu cầu của tiêu chuẩn.
3. (C) Sự khác nhau giữa int main() và int main(void)
Một quan điểm sai lầm phổ biến của các lập trình viên ngôn ngữ C là các khai báo nguyên mẫu hàm (function prototyped) như sau không có đối số.
int foo();
Trong thực tế, hàm này được xem như không biết số đối số. Sử dụng từ khóa void trong dấu ngoặc đơn (int foo(void) ) là cách chính xác nhất để nói với trình biên dịch là hàm của bạn khai báo không có đối số.
4. What’s the deal with void main()
– Theo các hàm gọi và trả về (calling / returning) trong C và C++ thì nếu bạn không bao giờ muốn trả về (return) bất cứ thứ gì từ một hàm. Bạn định nghĩa kiểu tra về của nó là void. Ví dụ hàm sau không có đối số và không có giá trị trả về:
void foo( void)
– Một sai lầm phổ biến là các lý luận tương tự ví dụ trên bạn lại đem áp dụng cho main(). Đó là điều không thể vì main() là một hàm đặc biệt, và bạn phải luôn xác định kiểu trả về của nó được định nghĩa là kiểu int. Có một số ngoại lệ như void main() là được phép nhưng nó chỉ hoạt động trên những hệ thống riêng biệt. Nếu bạn không chắc chắn bạn có đang sử dụng một trong những hệ thống đặc biết đó hay không, thì câu trả lời đơn giản là bạn nên sử dụng kiểu trả về tiêu chuẩn là int. Khi bạn gặp trường hợp này bạn sẽ hiểu rõ hơn về điều tôi đang nói.
– Bạn sẽ nhận được một cảnh báo (warning) từ trình biên dịch nếu bạn sử dụng “void main()” khi lấy code từ các diễn đàn. Do đó khi post code của mình lên các diễn đàn hay blog bạn nên sử dụng cách viết theo tiêu chuẩn để đảm bảo rằng những ai sử dụng code của bạn không phải rối trí vì những cảnh báo từ trình biên dịch của họ, mặc dù chương trình của bạn vẫn chạy tốt trên trình biên dịch của mình.
5. int main(int argc, char *argv[], char *envp[]) ?
int main(int argc, char *argv[], char *envp[]) là một phần mở rộng của tiêu chuẩn đảm bảo, một tham số có thể được bổ sung cho main(), trên một hệ thống, được sử để truy cập vào các biến môi trường (environment variables). Điều này sẽ không đảm bảo sẽ làm việc trên tất cả các trình biên dịch, vì vậy hãy cẩn thận khi sử dụng nó nếu bạn muốn giữ cách code của riêng mình.
Click vào đầy để xem thêm một số thông tin nền tảng để bạn hiểu thêm tại sao sử dụng void main() là không tốt (is bad).
(Theo cprogramming.com)
Rate this:
Chia sẽ bài viết này cho bạn bè
- Share
- X
Related
About thanhcuong1990
Handsome and talent!! ^^ View all posts by thanhcuong1990 → This entry was posted in C++. Bookmark the permalink. ← Những lỗi thường gặp khi mới bắt đầu lập trình C++ – Common Programming Mistakes Các bước cơ bản để giải một bài toán tin học. →3 Responses to Sự khác biệt giữa main(), void main(), int main(), int main(void), int main(int argc, char *argv[]).
-
Giang Pham says: 23/07/2013 at 11:47 pm
Anh giải thích kĩ hơn cho e ” int main(void) sử dụng khi bạn không yêu cầu truy cập tới các đối số dòng lệnh (command line arguments ) “—-truy cập tới các đối số dòng lệnh là sao cho em ví dụ được k? Và ví dụ int main(int argc, char** args[] ) em chưa hiểu rõ lắm. Thanks
Reply -
Phạm Văn Thông says: 22/01/2015 at 7:00 pm
Bài viết rất hữu ích. Cảm ơn bạn.
Reply -
Tùng says: 23/08/2015 at 10:02 am
Rất hay! Mình đã có câu hỏi này từ lâu rồi.
Reply
Leave a comment Cancel reply
My image

Đăng ký nhận tin qua Email
Nhập vào email của bạn để nhận thông báo từ blog khi có bài viết mới
Email Address:
Hoàn tất
Join 224 other subscribersThống kê blog
- 1,382,697 lượt truy cập
Tìm kiếm trên blog này
Search for:Danh mục bài viết
- Artificial Intelligence (3)
- ASP.net (4)
- C# (29)
- C++ (12)
- Chủ đề khác (10)
- CSS (3)
- Data structure and Algorithms (6)
- Design (2)
- Funny (3)
- General Knowledge (12)
- HTML 5 (1)
- Java (5)
- Office (2)
- Puzzles (4)
- Regular Expression (1)
- Thủ Thuật (12)
- Tips Progamming (2)
- WPF (8)
- XML (11)
Bài viết đáng chú ý
- Bài toán người đưa thư sử dụng giải thuật Heuristic
- Học WPF 4 trong một tuần - Ngày 1: Bắt đầu (Getting Started)
- Phân tích thời gian thực hiện giải thuật.
- Tài liệu và phương pháp học tốt lập trình WPF 4 với C#
-
Bài viết gần đây
- Cùng “quậy” với Notepad…
- 3 Trang web hay để bắt đầu với ngôn ngữ lập trình C++ – 3 Websites To Get Started With Learning C++ Programming Language
- Nhắc lịch làm việc qua tin nhắn SMS (free) với Google Calendar
- 11 mẹo tìm kiếm chuyên nghiệp trên Google, có thể bạn chưa biết!
- The Digits and Square Numbers – Mỗi ngày một câu đố [4]
- Around the Equator – Mỗi ngày một câu đố [3]
- Brothers and Sisters – Mỗi ngày một câu đố [2]
- Tall Men Next Door – Mỗi ngày một câu đố [1]
- Những khác biệt có thể bạn chưa biết trong lập trình C, C++ ?
- 15 Trang tìm icon miễn phí cho thiết kế web và ứng dụng
- 15 Câu hỏi phỏng vấn của Google sẽ làm bạn cảm thấy mình ngu ngốc.
- Thư Giãn với Google…
- Code nhóm trên Visual studio 2010 sử dụng Team Explorer và Codeplex
- 10 Cách kết hợp Font chữ hiệu quả
- 5 Nguyên tắc chọn và sử dụng font chữ khi thiết kế website
- Triển khai một ứng dụng ASP.NET trên host miễn phí – Deploying a ASP.NET application in free web hosting
- Ứng dụng Chuyển đổi tiếng Việt có dấu sang không dấu bằng C#
- Giới thiệu về biểu thức chính quy – Introduction to Regular expression [1]
- Demo thuật toán CKY – CKY Parsing Algorithm simulation
- Các tư thế ngồi giúp người dùng máy tính không mỏi.
Blog của Bạn Bè.
- BE Radio
- Blog Minh Chiến
- Blog Nguyễn Hoài Thương
- Blog Nhật Linh
- Blog Phan Công Cảnh
- Blog Trần Thế Toàn
- Blog Việt Quốc
- Blog Xuân Chiến
- DevBe.net
- Nguyễn Vũ Long Blog
- Top Free software
- VinaCode
Thông Tin Công Nghệ- An error has occurred; the feed is probably down. Try again later.
Đánh giá cao.
Learn to change!
The biggest downside of success is to make people think solid methods in the past or present are still correct in the future.
Khách xem blog (25-11-2011)
Tag Cloud
- Amazing
- ASP.NET
- biểu tượng máy tính
- C++
- C++ Programming tip and trick
- code chung
- code group
- code nhóm
- Computer
- Get free icon for web design
- ghi text C++
- google interviews
- Google tips
- Google trick
- group code
- Have fun with Google
- Học Thuật
- it knowledge
- Java Programming
- khám phá Notepad
- Lap Trinh C
- Mẹo tìm kiếm google
- Mẹo vặt
- Mỗi ngày một câu đố
- Notepad tip & tricks
- Programming
- Programming CKY algorithm
- Programming in C
- Programming in Java
- Programming in Regular expression
- Puzzle
- Thủ thuật Google
- thủ thuật Notepad
- Tips
- Trang web học C++
- Tư thế ngồi đúng khi sử dụng máy tính
- tự học lập trình C++
- Using font in website
- viết virus trên Notepad
- Web hay
- ý nghĩa biểu tượng máy tính
- Đọc ghi file trên C#++
- Đố vui tiếng Anh
Lưu trữ
- May 2012 (1)
- April 2012 (2)
- March 2012 (1)
- December 2011 (6)
- November 2011 (2)
- October 2011 (1)
- September 2011 (4)
- August 2011 (2)
- July 2011 (2)
- June 2011 (6)
- May 2011 (5)
- April 2011 (10)
- March 2011 (9)
- February 2011 (20)
- January 2011 (16)
- December 2010 (35)
- November 2010 (8)
- Comment
- Reblog
- Subscribe Subscribed
-
For Better Life! Join 224 other subscribers Sign me up - Already have a WordPress.com account? Log in now.
-
-
-
For Better Life! - Subscribe Subscribed
- Sign up
- Log in
- Copy shortlink
- Report this content
- View post in Reader
- Manage subscriptions
- Collapse this bar
-
Từ khóa » Hàm Int Và Void Là Gì
-
Hàm Main Trong C
-
Giúp Mình định Nghĩa 2 Hàm Void Main Và Int Main - Dạy Nhau Học
-
Int Main() Và Void Main() Trong C++? - Programming - Dạy Nhau Học
-
Hàm Main Trong C++ Là Gì
-
Sự Khác Nhau Giữa Void Main Và Int Main Trong C/C++ Là Gì?
-
Void Main() Và Int Main() Khi Nào Mình Dùng Void Và Khi Nào Mình ...
-
Int Main(), Int Main(void), Void Main() Có Gì Khác Nhau?
-
Void Main Trong C Là Gì
-
Định Nghĩa Và Phân Biệt Void Main Và Int Main!!!!!!!!!!! - UIT - Forum
-
Sự Khác Biệt Giữa 'int Main ()', 'void Main ()' Và 'main ()' Trong Ngôn ...
-
Bài 29. Hàm Kiểu Void Trong C - Lập Trình Không Khó
-
Hàm Void Main And Int Main - Diễn Đàn Tin Học
-
Hàm : Hàm Có Giá Trị Trả Về Và Hàm Void Trong C | Codelearn
-
[Tự Học C++] Tìm Hiểu Về Tham Số Và đối Số Trong Hàm | TopDev