foo.c的重複結構定義
struct foo {
int a;
};
bar.c
struct foo {
char *s;
double x,y;
};
的結構定義只在.c文件。根據C標準是否合法?標準的哪一部分如此說明? 編輯:沒有#include結構定義。
謝謝大家的快速響應! :D
foo.c的重複結構定義
struct foo {
int a;
};
bar.c
struct foo {
char *s;
double x,y;
};
的結構定義只在.c文件。根據C標準是否合法?標準的哪一部分如此說明? 編輯:沒有#include結構定義。
謝謝大家的快速響應! :D
該代碼完全合法C.您可能會遇到調試器問題(將一種類型誤認爲另一種類型,試圖將其中一種顯示爲另一種類型),但從語言的角度來看,這樣做很好。
沒有標準的任何部分可以直接說這是合法的。相反,沒有任何標準說明它是非法的。
因爲C++將鏈接的概念擴展爲類,而C++類中的非本地鏈接始終具有外部鏈接,所以類似這樣的內容在C++中將是非法的。
如果他們不知道彼此(即通過#include
什麼的),那應該沒有問題。如果他們這樣做,你可以看看How to resolve two structures with the same name?。
對第二段沒有把握。沒有什麼說我不能在我的代碼中放大象;) – sje397 2010-07-19 17:12:53
@ sje397:是的,但標準甚至沒有引入「大象」的概念。至於結構類型 - 它們存在於標準中,並且結構的聲明規則也在標準中描述。該標準說明了在程序中使用結構類型需要做些什麼,只要滿足這些要求,您就可以。 – AnT 2010-07-19 18:22:38
基本上,它就像是問你將結構類型命名爲「Abcdef」是否合法。你會如何回答這樣的問題?如果你只是說「是」,那麼接下來的問題將是'Dgefht'作爲一個結構類型名稱。這個好嗎?等等......所以,當涉及到這樣的問題時,正確的答案是,如果標準不禁止這樣的標識符,那麼使用它就可以。與原始問題中的結構聲明一樣。 – AnT 2010-07-19 18:25:21