vấn đề 1
khi e để code định nghĩa hàm trong file header thì chạy binh thường
nhưng khi tách file định nghĩa hàm ra khỏi header thì lỗi
e có 1 file header , 1 file code của 1 hàm con, 1 file main như sau
3 file này đã để chung 1 thư mục
file main.c
#include <stdio.h>
#include <conio.h>
#include "mylibrary.h"
main ()
{
int n;
do
{
printf ("Nhap vao 1 so nguyen duong de kiem tra so nguyen to\n");
scanf ("%d",&n);
}
while (n <=0);
printf("Cac so nguyen to < %d la\n", n);
vListNT (n);
getch();
return 0;
}
file header mylibrary.h
int iCheckNT (int n);
void vListNT (int n);
file code hàm
#include "mylibrary.h"
#include <math.h>
int iCheckNT (int n)
{
int i;
if ( n <2) return 0;
for (i = 2; i <=sqrt(n); i++)
if ( n % i ==0) return 0;
return 1;
}
void vListNT (int n)
{
int i;
if (n == 2 || n==1 ) printf (" Khong co so nguyen to nao < %d", n);
else for (i = 2; i < n; i++) if ( iCheckNT (i) == 1) printf ("%d \t",i);
}
biến dịch trên dev c++ thì gặp lỗi (.text+0x52): undefined reference to `vListNT’
vấn đề 2: tương tự lần này e dùng include guard để tránh thư viện được biên địch 2 lần
e cũng có 3 file
file hàm main.c như ở vấn đề 1
file header mylibrary.h
#ifndef HEADER_FILE
#define HEADER_FILE
#include <math.h>
int iCheckNT (int );
void vListNT (int );
#endif
file code hàm
#include "mylibrary.h"
int iCheckNT (int n)
{
int i;
if ( n <2) return 0;
for (i = 2; i <=sqrt(n); i++)
if ( n % i ==0) return 0;
return 1;
}
void vListNT (int n)
{
int i;
if (n == 2 || n==1 ) printf (" Khong co so nguyen to nao < %d", n);
else for (i = 2; i < n; i++) if ( iCheckNT (i) == 1) printf ("%d \t",i);
}
thì cũng k chạy được lỗi như ở vấn đề 1
nếu e bỏ định nghĩa hàm vào file header luôn thì chả sao, nhưng e muốn tách ra 1 file .c riêng thì lại lỗi? lỗi ở đâu ạ, tại sao hàm vListNT bị báo là k xác định


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