2010-05-14 10 views
59

Tôi muốn có thể tạo một tập hợp các hàm trong một tệp tiêu đề mà tôi có thể #include trong một trong các Chương trình C của tôi.Làm cách nào để tạo các tệp tiêu đề C

+43

bằng trình chỉnh sửa văn bản? – stefanB

+12

Nếu tôi làm theo đúng, những gì bạn muốn là tạo một thư viện, tương tự như các thư viện C chuẩn để bạn bao gồm một tệp tiêu đề có định nghĩa hàm, sau đó liên kết với thư viện đó khi xây dựng tệp thực thi cuối cùng của bạn. Có đúng không? –

+0

Có, bạn đã đúng. – user340838

Trả lời

133
  1. Mở soạn thảo văn bản yêu thích của bạn
  2. Tạo một file mới có tên whatever.h
  3. Đặt nguyên mẫu hàm của bạn ở trong đó

XONG.

Ví dụ whatever.h

#ifndef WHATEVER_H_INCLUDED 
#define WHATEVER_H_INCLUDED 
int f(int a); 
#endif 

Lưu ý: bao gồm bảo vệ (lệnh tiền xử lý) được bổ sung nhờ luke. Chúng tránh bao gồm cùng một tệp tiêu đề hai lần trong cùng một trình biên dịch. Một khả năng khác (cũng được đề cập trong các ý kiến) là thêm #pragma once nhưng nó không được đảm bảo để được hỗ trợ trên mọi trình biên dịch.

Ví dụ whatever.c

#include "whatever.h" 

int f(int a) { return a + 1; } 

Và sau đó bạn có thể bao gồm "whatever.h" vào bất kỳ tập tin .c khác, và liên kết nó với đối tượng tập tin whatever.c của.

Như thế này:

sample.c

#include "whatever.h" 

int main(int argc, char **argv) 
{ 
    printf("%d\n", f(2)); /* prints 3 */ 
    return 0; 
} 

Để biên dịch nó (nếu bạn sử dụng GCC):

$ gcc -c whatever.c -o whatever.o 
$ gcc -c sample.c -o sample.o 

Để liên kết các tập tin để tạo ra một tập tin thực thi:

$ gcc sample.o whatever.o -o sample 

Bạn có thể kiểm tra mẫu:

$ ./sample 
3 
$ 
+7

bạn có thể muốn đề cập đến tiêu đề bảo vệ – luke

+0

@ luke: Cảm ơn rất nhiều. Không có ý tưởng bảo vệ tiêu đề là gì. Truy cập google ngay bây giờ. Cảm ơn một lần nữa. –

+0

@luke: oh! Tôi hiểu rồi. Điểm tốt. Sẽ thêm chúng. –

2

Tệp tiêu đề có thể chứa bất kỳ mã C hợp lệ nào, vì chúng được bộ xử lý trước đưa vào bộ biên dịch trước khi biên dịch.

Nếu tệp tiêu đề chứa hàm và được bao gồm bởi nhiều tệp .c, mỗi tệp .c sẽ nhận được một bản sao của hàm đó và tạo biểu tượng cho nó. Trình liên kết sẽ khiếu nại về các biểu tượng trùng lặp.

Về mặt kỹ thuật, có thể tạo các hàm static trong tệp tiêu đề để đưa vào nhiều tệp .c. Mặc dù điều này thường không được thực hiện vì nó vi phạm quy ước rằng mã được tìm thấy trong các tệp .c và các khai báo được tìm thấy trong các tệp .h.

Xem các cuộc thảo luận trong C/C++: Static function in header file, what does it mean? để được giải thích thêm.