Có phải hàm main được gọi trước?

Trên lớp cô em bảo rằng nếu ta không khai báo hàm thì khi chương trình chạy sẽ chạy từ trên xuống còn ngược lại nếu có khai báo hàm thì nó sẽ tìm đến hàm main để chạy trước. Nhưng em đã về kiểm tra và thấy rằng nó tìm đến hàm main để chạy trước dù ta quên khai báo hàm .Mong mọi người giải thích giúp em.

Câu hỏi tối nghĩa quá.

Không khai báo hàm gì?

Code em viết như thế nào?

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//void nhapmang(int a[], int n);
//void xuatmang(int a[], int n);

void nhapmang(int a[], int n)
{
    srand((int)time(NULL));
    for(int i=0; i<n; i++)
        a[i]=rand()%10;
}

void xuatmang(int a[], int n)
{
    for(int i=0; i<n; i++)
        printf("%d ", a[i]);
}

int main()
{
    int n;
    printf("nhap vao so phan tu cua mang: ");
    scanf("%d", &n);
    int a[n];
    nhapmang(a,n);
    xuatmang(a,n);
}

ví dụ là nếu ta không khai báo prototype thì chương trình sẽ chạy từ trên xuống hay tìm đến hàm main để chạy trước :sweat:

Hàm main luôn được gọi trước, không liên quan đến việc có hay không có prototype của các hàm khác trong file đó.

Riêng về prototype: Nếu định nghĩa của hàm xuatmangnhapmang ở trước nơi gọi nó thì không cần phải viết prototype.

Chỉ khi nào việc định nghĩa hàm được đặt sau, hoặc không cùng một file với hàm gọi, thì ta mới cần prototype.

Trường hợp này cần prototype

int foo() {
    bar();
}

int bar() {
   ...
}

Trường hợp này không cần

int bar() {
   ...
}

int foo() {
    bar();
}
3 Likes

cảm ơn anh Đạt. Đã thông rồi :grinning:

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