Giúp mình định nghĩa 2 hàm void main và int main

c

(Duy) #1

Mình mới học C, coi clip của a Đạt, có nghe a giải thích nhưng chưa hiểu lắm, bạn nào giỏi có thể giải thích dùm mình sự khác biệt của void main và int main, công dụng của 2 hàm này là gì


Hỏi sự khác nhau giữa void main và int main?
(Văn Dương) #2

Void main là ngày xưa. Bây giờ phải viết là int main.
Đó là quy chuẩn.


(...) #3

Hàm có kiểu void là hàm không trả về giá trị.
Hàm có kiểu int sẽ trả về giá trị trong phạm vi biến int.

Bạn cứ học tiếp, sau này đến bài về Hàm (function) sẽ hiểu rõ hơn.


(Trần Tuấn An) #4

sau khi thực hiện 1 hàm thì chúng ta cần trả về cho máy để báo hiệu sự hoàn thành của hàm tuy nhiên hàm void main thì lại ko yêu cầu trả về dữ liệu gì cả bạn hiểu như khi gọi hàm void thì nó trực tiếp thực hiện hàm đó xong thôi ko cần phải trả về cái gì để báo cho chương trình cả


(Mạc Anh Hiếu) #5

Theo mình thì bạn nên viết Void main (void)<Không trả về giá trị,không đối > là rõ rành,cụ thể nhất


(Giang Nguyen) #6

Viết void main hay int main mình nghĩ là phụ thuộc vào compiler thôi. Nếu compiler yêu cầu phải trả về giá trị thì phải viết int main, không thì cứ viết void main (cứ thử nếu void main chạy báo lỗi thì chuyển thành int, báo nỗi nữa thì để main không thôi).
Cái này không quá quan trọng vì các ngôn ngữ C# hay Java thì đều viết là void main cả.


(Giang Nguyen) #7

Cái quy chuẩn đó là gì bạn? Cho mình tên quy chuẩn đc không? Tại mình thấy nhiều các ngôn ngữ khác toàn viết là void main cả.


(Pham Van Hai) #8

Standard C — Hosted Environment

For a hosted environment (that’s the normal one), the C11 standard (ISO/IEC 9899:2011) says:

5.1.2.2.1 Program startup

The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters:

int main(void) { /* ... */ }

or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):

int main(int argc, char *argv[]) { /* ... */ }

Bạn tham khảo thêm ở đây


(Lê Đình Hoàng Sơn) #9

Void main là kiểu vô định,ko có giá trị trả về của hàm main, int main là hàm main trả về giá trị int,tuy nhiên bạn không trả về cũng được.Điều này chỉ áp dụng cho hàm main thôi.Hàm main thực chất là 1 procedure,giá trị trả về của main k quan trọng mà chỉ có giá trị trả về của hàm con khác ms quan trọng.Tất cả các hàm khác đều tuân theo đúng quy luật là : Void thì không có giá trị trả về , int (hay kiểu gì khác) + tên hàm thì phải có giá trị trả về .

Bạn có vẻ chưa học Pascal giống mình.Ban đầu sẽ hơi ngợp khi học C vs C++. Bạn nên học từ từ, ko được copy code hoặc chưa hiểu mà đã code,sẽ gây lười suy nghĩ. Ban đầu cứ code,sai tìm lỗi,ko tìm được nhờ người khác sửa và giải thích giùm.

Thân


(Ho Hai Dang) #10

Chào bạn,
Mình giải thích như thế này cho bạn hiểu nhé. Trong hệ điều hành UNIX nói chung và Linux nói riêng, khi bạn run 1 chương trình gì đó ‘./’ tức là bạn đang gọi vào hàm main của chương trình (system call). Chương trình đó sẽ tự động trả về 1 biến tên là errno, biến này được quy định:
‘= 0’ là success
‘> 0’ là có lỗi. Số 1 sẽ là 1 lỗi khác, số 2 sẽ là 1 lỗi khác. Bạn tìm vào thư mục /usr/include/asm-genertic/ có 2 file errno.h & errno-bash.h sẽ có định nghĩa về các lỗi này.
Để thấy đươc biến này khi chạy chương trình bạn dùng lệnh này ngay sau khi chạy chương trình đó

$ echo $?

Nếu xuất ra số 0 thì chương trình bạn chạy đúng. Còn ‘>0’ thì chạy sai
Do đó việc đề int main() thay vì void main() là để cho chương trình trả về 1 giá trị báo cho user biết là chương trình có chạy đúng không.
Như bạn thấy, return 0; hay exit(0); đây là trả về biến errno cho chương trình.
Đó là lý do chính dẫn đến việc không ai dùng hàm void main() nữa. Một lý do nữa là do một số compiler không chấp nhận void main() lý do này chỉ là chữa cháy thôi. Cái chính vẫn là như mình vừa đề cập.
Thân!


(Sơn Trà) #11

Cam On An . Giai Thich rat hay va de hieu .


(rogp10) #12

Chỉ đúng nếu bạn viết kiểu tương tác trực tiếp, còn viết để chạy trong script thì phải dùng int.


(Vi) #14

Bác giải thích khá chi tiết, cảm ơn bác nhé!


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?