1樓:甄爍華
你知道貝塞斯達嗎?就是做輻射系列和上古卷軸的那個遊戲公司。他裡面專門有乙個招的職位就是C工程師。
之前還嘗試過STM8標準下的C語言開發(英文直翻不知道這樣稱呼是否準確),做乙個能自動包裝的機器。這個project現在還在做。做下來的感覺就是在操控硬體…
顯示全部
2樓:阿爾伯特
編譯器內部是如何處理這個結構體定義:就是在問編譯期間建立符號表的過程咯?typedef只是宣告,不是定義,有些實現暫時不填它索引的錶號,當結構出現後再填入…
typedef定義在struct實際定義之前,為什麼沒有編譯錯誤呢?:c給的福利,編譯器都要實現可以提前宣告…
為什麼不直接寫成如下定義呢:如果結構體內要定義當前型別的指標時,這就能看出便利了…
3樓:冒泡
建議看c標準中關於define和declaration一節
typedef是宣告不是定義,只是告訴編譯器:以後看到這個名字就用這個型別啊。。。
比如,typedef map m,編譯器看到這裡是不會例項化這個模板的,只是記錄下名字對應關係,假如你這行和m實際起作用的位置的位元組對齊設定有區別,以後者為準(這是乙個坑,可能碰到的哦)
4樓:不中
第三個問題回答一下,主要是存在結構體某元素可能使用該結構體指標的情況(這種情況常見於鍊錶中。),此時,你再試試定義就明白了。指向本型別的指標,其型別你是用struct common_s 還是用common_t呢?
你後面的那個宣告,在最後完成前common_t還沒宣告呢,不能用。而用struct common_s的話,將乙個common_t型結構體物件的指標賦值給它時就會有型別不匹配的warnning。
5樓:劉dl
編譯器內部是如何處理這個結構體定義的呢?
typedef定義在struct實際定義之前,為什麼沒有編譯錯誤呢?
為什麼不直接寫成如下定義呢:
大二的乙個暑期project是寫的C語言子集的乙個簡易直譯器。
使用的技術是,利用GNU的flex和bison,生成中間的語法樹結構,然後自己解析語義,執行。
其中使用bison的關鍵是,要屬於C語言的BNF正規化描述文件(見編譯原理類的書),當初還沒開始學編譯原理(大三才開始學),各種尾遞迴看的各種頭疼,還見過很多從來沒用過的語法結構(你在C語言的教材裡也看不到的,不常用的等)。。。
言歸正傳,Negin中的那種先寫宣告再定義的方式貌似對應C grammer裡的「半結構定義」 的grammer。具體可查詢
ANSI C grammar 最新的 Lex 和 Yacc 描述
ANSI C grammar (Yacc)
---------ANSI C grammer 部分
declaration_specifiers
: storage_class_specifier
|storage_class_specifier declaration_specifiers
| type_specifier
|type_specifierdeclaration_specifiers
| type_qualifier
| type_qualifier declaration_specifiers
| function_specifier
| function_specifier declaration_specifiers
storage_class_specifier
:TYPEDEF
| EXTERN
| STATIC
| AUTO
| REGISTER
;type_specifier
: VOID
| CHAR
| SHORT
| INT
| LONG
| FLOAT
| DOUBLE
| SIGNED
| UNSIGNED
| BOOL
| COMPLEX
| IMAGINARY
|struct_or_union_specifier
| enum_specifier
| TYPE_NAME
;---struct的定義有如下三種方式
struct_or_union_specifier
: struct_or_union IDENTIFIER ''
| struct_or_union ''
|struct_or_union IDENTIFIER
;struct_or_union
: STRUCT
| UNION
;對於問題2,符合grammer的話,就沒有錯。
對於問題1,如何處理的問題,編譯器具體實現不知道,我能想到的也就是先register出現的struct名,等到掃瞄到定義的地方再加上定義了。
對於問題3,個人習慣問題吧。
6樓:
2. typedef定義在struct實際定義之前,為什麼沒有編譯錯誤呢?
typedef就是宣告了乙個型別的別名,不需要型別是完整的
編譯器如何處理 printf 這種語言自帶的函式?
豆芽 語言其實是個規範。如果要讓使用某個語言開發的程式要跑起來,除了編譯器,還得有工程技術支援,和語言擴充套件 庫 工程技術,比如程式執行時支援 程序載入技術 os介面對接等等 從題主的描述來講,我懷疑題主書都沒看就上來問問題。首先,printf不是語言自帶的函式。然後在parser之後的過程中,在...
設計類Python編譯器時如何處理tab和space縮排?
Belleve ptl 裡面的做法是這樣,維護乙個 stack,然後對每乙個可能作為語句分隔符的行首 如果行首的空白序列和棧頂相同,判定為相同的縮排塊 如果棧頂記錄的縮排序列是行首空白序列的真字首,則判定為縮排,當前行首空白壓棧 否則,嘗試退棧並和新的棧頂比對,若退到某一級棧頂和當前行空白相同了,則...
如何為VS2017配置C語言的編譯器?
vs2019 Visual Studio 2019 權威指南 C語言 軟體工程開發的方向 技巧要領 嗶哩嗶哩 乾杯 bilibili 不跟隨 你是想說用gcc編譯沒問題,用vs編譯出問題了吧,這是因為Windows和linux兩套編譯器對c標準支援的不一樣,你想要vs的編輯器想用gcc編譯,可以考慮...