2017-04-02 148 views
0

我的問題很簡單,這是否C:鑄造新的結構VS鑄造給定結構

typedef struct {a;b;c;d;}bar; 
((bar*)ANOTHERSTRUCTPOINTER)->a=1; 
((bar*)ANOTHERSTRUCTPOINTER2)->a=1; 
//<...> 
((bar*)ANOTHERSTRUCTPOINTERn)->a=1; 

具有相同的執行時間呢?

((struct {a;b;c;d;}*)ANOTHERSTRUCTPOINTER)->a=1; 
((struct {a;b;c;d;}*)ANOTHERSTRUCTPOINTER2)->a=1; 
//<...> 
((struct {a;b;c;d;}*)ANOTHERSTRUCTPOINTERn)->a=1; 

請記住這只是一個例子,所以不要質疑其實我並沒有使用數組

回答

0

是的,他們指的是同樣的事情,應該編譯成相同的可執行代碼。

+0

我所知道的是,他們做同樣的事情,但我還是有疑問,因爲在第一個結構只定義一次,而在第二個它在每一個塑像的定義(或者所以它看起來像對我來說,這就是爲什麼我問) –

+1

你是正確的結構每次重新定義,但這發生在編譯時,而不是運行時。在運行時,結構的「字段」僅由編譯器對其起始地址進行硬編碼(偏移)。 – Wyzard

+1

我想我應該補充一點,這個答案在技術上是特定於平臺的,並且不是由C標準保證的 - 原則上,您可能會使用一個在運行時解析源代碼的C解釋器,在這種情況下,重複的結構定義可能需要額外的工作。但實際上,每個人都將C編譯爲機器碼,並且編譯器將結構字段解析爲固定的偏移量。 – Wyzard