30/09/2018, 17:55

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.

Mai Anh Dũng viết 20:02 ngày 30/09/2018

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

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

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

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

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

duong viết 19:57 ngày 30/09/2018
#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

Mai Anh Dũng viết 20:08 ngày 30/09/2018

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();
}
duong viết 20:08 ngày 30/09/2018

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

Bài liên quan
0