亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
1234下一頁
最近訪問板塊 發(fā)新帖
查看: 13255 | 回復: 30
打印 上一主題 下一主題

[C] 為什么可以定義兩個相同的結(jié)構(gòu)體而不出錯? [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-11-21 13:56 |只看該作者 |倒序瀏覽
我在兩個文件里分別定義了名稱相同的兩種結(jié)構(gòu)體,但是它可以運行正常,不知道為啥,但同一文件里定義就不行,難道鏈接的時候不管嗎?,thanks

gcc test.c test2.c

test.c
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <string.h>
  4. typedef struct tstnode
  5. {
  6.     int rightid;
  7. } TSTNODE;

  8. void test(void);
  9. int main(void) {
  10.         test();
  11.         test2();
  12. }
  13. void test(void) {
  14.         TSTNODE a={1};
  15.         printf("rightid is %d\n",a.rightid);
  16. }
復制代碼



test2.c
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct tstnode
  4. {
  5.     char *leftid;                       
  6. } TSTNODE;

  7. void test2(void) {
  8.         TSTNODE a={"abc"};
  9.         printf("leftid is %s\n",a.leftid);
  10. }

復制代碼

[ 本帖最后由 wwdwwd 于 2009-11-21 13:57 編輯 ]

論壇徽章:
0
2 [報告]
發(fā)表于 2009-11-21 13:57 |只看該作者
為啥要出錯?

論壇徽章:
0
3 [報告]
發(fā)表于 2009-11-21 14:03 |只看該作者
連接器是看不到類型定義的,它也無需關心類型定義。

論壇徽章:
0
4 [報告]
發(fā)表于 2009-11-21 14:21 |只看該作者
名字空間

論壇徽章:
0
5 [報告]
發(fā)表于 2009-11-21 14:41 |只看該作者
原帖由 langue 于 2009-11-21 13:57 發(fā)表
為啥要出錯?

如果不出錯的話,意味著整個項目中有多個名稱相同,但實際上不同的結(jié)構(gòu)體,這樣的話,別的文件要使用時就不知道該使用哪個啦

論壇徽章:
0
6 [報告]
發(fā)表于 2009-11-21 14:42 |只看該作者
原帖由 cugb_cat 于 2009-11-21 14:21 發(fā)表
名字空間

名字空間跟這個有關嗎?能說的詳細一些嗎?

論壇徽章:
0
7 [報告]
發(fā)表于 2009-11-21 15:59 |只看該作者
原帖由 wwdwwd 于 2009-11-21 14:41 發(fā)表

如果不出錯的話,意味著整個項目中有多個名稱相同,但實際上不同的結(jié)構(gòu)體,這樣的話,別的文件要使用時就不知道該使用哪個啦


這屬于工程問題了,命名規(guī)范,設計架構(gòu)等方面,本來就不應該出現(xiàn)不同意義卻重名的現(xiàn)象,與其找借口證明重名合理性還不如想辦法去掉重名

論壇徽章:
0
8 [報告]
發(fā)表于 2009-11-21 17:26 |只看該作者

lz 你可以調(diào)試下 include "test.c"

論壇徽章:
0
9 [報告]
發(fā)表于 2009-11-22 00:08 |只看該作者
原帖由 drangon 于 2009-11-21 15:59 發(fā)表


這屬于工程問題了,命名規(guī)范,設計架構(gòu)等方面,本來就不應該出現(xiàn)不同意義卻重名的現(xiàn)象,與其找借口證明重名合理性還不如想辦法去掉重名

命名規(guī)范的東西誰都懂,我是說這種東西為什么不是由編譯器來報錯,就像重復定義函數(shù)或變量一樣,而是由程序員小心的處理或命名空間來處理

論壇徽章:
59
2015年亞洲杯之約旦
日期:2015-01-27 21:27:392015年亞洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵節(jié)徽章
日期:2015-03-06 15:50:392015年亞洲杯之阿聯(lián)酋
日期:2015-03-19 17:39:302015年亞洲杯之中國
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03雙子座
日期:2014-12-10 21:39:16處女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
10 [報告]
發(fā)表于 2009-11-22 02:52 |只看該作者
因為Test1.c和Test2.c是分開編譯的,編譯Test1.C的時候編譯器看不到Test2.c
同樣的Test2.c編譯時也看不到Test1.c

Gcc -c test1.c -o test1.o  #目標代碼Test1.o,不會有Struct的信息.就算是int i;目標代碼也不會知道這個i是Int的.只是Unsign INT和Sign Int計算時代碼不同~
Gcc -c test2.2 -o test2.o #同上
Gcc test1.o test2.o test  #二進制代碼中更不會有結(jié)構(gòu)極變量的信息
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP