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ó phải hàm main được gọi trước?
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
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 xuatmang
và nhapmang
ở 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
1 Like