Tôi đã đọc ở một vài nơi mà một cấu trúc C có thể được định nghĩa một cách an toàn nhiều lần, nhưng tôi nhận được lỗi "định nghĩa lại cấu trúc" từ gcc để nhân xác định cấu trúc (thông qua bao gồm nhiều). Một ví dụ rất đơn giản như sau:Cấu trúc C có thể được xác định nhiều lần không?
foo.c:
#include "a.h"
#include "b.h"
int main(int argc, char *argv[]) {
struct bar b;
b.a = 2;
return 0;
}
ah:
struct bar {
int a;
int b;
};
bh:
#include "a.h"
struct buz {
int x;
int y;
};
Nếu tôi chạy gcc foo.c
tôi nhận được:
In file included from b.h:1:0,
from foo.c:2:
a.h:1:8: error: redefinition of ‘struct bar’
a.h:1:8: note: originally defined here
Tôi biết tôi đã không đưa bất kỳ bao gồm bảo vệ và những người sẽ sửa lỗi biên dịch, nhưng sự hiểu biết của tôi là điều này nên làm việc dù sao. Tôi cũng đã thử hai định nghĩa struct bar
trong foo.c và tôi nhận được thông báo lỗi tương tự? Vì vậy, có thể cấu trúc được định nghĩa mutiple lần trong C hay không?
ví dụ rất chính xác và ví dụ đẹp cho OP :) – Lefteris
vâng, về cơ bản mọi thứ trong C có thể được khai báo nhiều lần nhưng xác định một lần. –
Vâng, tôi đoán rằng sẽ xóa mọi thứ. Cảm ơn. – Elektito