Lập trình C: void main() hay int main()?

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ời

    Phiê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:

    int main()
    int main(void)
    int main(int argc, char* argv[])

    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ụng int main() hoặc int main(void). Tuy nhiên, việc chọn sử dụng int 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ời

    Cả hai cách viết void mainmain đều không có trong chuẩn của C. Cách viết đúng là

    int main(main)

    Hoặc :

    int main(int argc, char **argv)

    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ời

    Ai 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ời

    Cá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ả.

    int main()
    {
        // bắt buộc phải return 1 giá trị int
        return 123456;
    }

    Còn void: Không return hoặc return ..không gì hết

    void main()
    {
        return;
    }

    Guest

    - 1970/01/01 Trả lời

    Chươ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 ạ

10 bình luận