Lập trình C: void main() hay int main()?
Chào mọi người,
Trong khi học về lập trình C thì em thấy một số tài liệu sử dụng cách viết void main()
một số khác sử dụng int main()
. Theo ý kiến cá nhân của mọi người thì nên sử dụng cách nào và vì sao?
Guest
- 1970/01/01 Trả lờiPhiên bản ANSI C 89 quy định các cách viết sau khi khai báo hàm
main()
trong chương trình:Giải thích ý nghĩa của từng cách viết:
Sử Dụng
int main()
Với cách viết này hàm
main()
sẽ được gọi với một số lượng đối số truyền vào là tùy ý và hàm sẽ trả về giá trị là một số nguyên integer. Giá trị này chính là trạng thái của chương trình.Sử Dụng
int main(void)
Với cách viết này hàm
main()
sẽ được gọi mà không có đối số truyền vào và hàm sẽ trả về giá trị là một số nguyên integer. Giá trị này chính là trạng thái của chương trình.Sử Dụng
int main(int argc, char* argv[])
Với cách viết này hàm
main()
sẽ được gọi với một số lượng đối số truyền vào làargc
(argc
hiển nhiên sẽ nhận kiểu dữ liệu làint
) vàargv[]
chứa các đối số truyền vào (trong trường hợp này có kiểu dữ liệu làchar
). Và hàm sẽ trả về giá trị là một số nguyên integer. Giá trị này chính là trạng thái của chương trình.Trường hợp nếu không có đối số truyền vào hàm
main()
chúng ta đều có thể sử dụngint main()
hoặcint main(void)
. Tuy nhiên, việc chọn sử dụngint main(void)
sẽ giúp cải thiện được tốc độ của chương trình.Về Cách Viết
void main()
Đây là cách viết không đúng chuẩn và trong một số trường hợp khi compile source code sẽ trả về lỗi.
Guest
- 1970/01/01 Trả lờiCả hai cách viết
void main
vàmain
đều không có trong chuẩn của C. Cách viết đúng làHoặc :
Mục đích của việc trả về giá trị là kiểu số đó là để trả về mã status của chương trình.
Guest
- 1970/01/01 Trả lờiAi sửa lỗi giúp e vs ạ!Giải thích cho e để e hiểu nữa ạ.
Lỗi ở void main,khi e sửa thành int main thì thêm lỗi khác.
include<stdio.h>
include"graphics.h"
define ScreenWidth getmaxx()
define ScreenHeight getmaxy()
define GroundY ScreenHeight*0.75
int ldisp = 0;
void DrawManAndUmbrella(int x, int ldisp)
{
//head
circle(x, GroundY - 90, 10);
line(x, GroundY - 80, x, GroundY - 30);
//hand
line(x, GroundY - 70, x + 10, GroundY - 60);
line(x, GroundY - 65, x + 10, GroundY - 55);
line(x + 10, GroundY - 60, x + 20, GroundY - 70);
line(x + 10, GroundY - 55, x + 20, GroundY - 70);
//legs
line(x, GroundY - 30, x + ldisp, GroundY);
line(x, GroundY - 30, x - ldisp, GroundY);
//umbrella
pieslice(x + 20, GroundY - 120, 0, 180, 40);
line(x + 20, GroundY - 120, x + 20, GroundY - 70);
}
void Rain(int x)
{
int i, rx, ry;
for (i = 0; i<400; i++)
{
rx = rand() % ScreenWidth;
ry = rand() % ScreenHeight;
if (ry<GroundY - 4)
{
if (ry<GroundY - 120 || (ry>GroundY - 120 && (rx<x - 20 || rx>x + 60)))
line(rx, ry, rx + 0.5, ry + 4);
}
}
}
void main()
{
int gd = DETECT, gm, x = 0;
//Change BGI directory according to yours
initgraph(&gd, &gm, "C:\TurboC3\BGI");
while (!kbhit())
{
//Draw Ground
line(0, GroundY, ScreenWidth, GroundY);
Rain(x);
ldisp = (ldisp + 2) % 20;
DrawManAndUmbrella(x, ldisp);
delay(75);
cleardevice();
x = (x + 2) % ScreenWidth;
}
getch();
}
Guest
- 1970/01/01 Trả lờiCách nào cũng được. Nếu int main thì phải return 1 cái gì đó có kiểu int thôi. Void thì không cần return hoặc return không gì cả.
Còn void: Không return hoặc return ..không gì hết
Guest
- 1970/01/01 Trả lờiChương trình sau cho kết quả như thế naò? Giải thích
Int main()
{
Node*p;
InsertFirst(p,2);
Printf("so luong phan tu cua danh sach :%d"),
Listsize(p));
Return 1;
}
Anh chị ơi giải hộ em bài này với ạ