C指针原理(12)-C指针基础
生活随笔
收集整理的這篇文章主要介紹了
C指针原理(12)-C指针基础
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
tcctok.h定義了C語言的詞法分析的基本元素,主要定義了關鍵字。
/ keywords /DEF(TOK_INT, "int")DEF(TOK_VOID, "void")DEF(TOK_CHAR, "char")DEF(TOK_IF, "if")DEF(TOK_ELSE, "else")DEF(TOK_WHILE, "while")DEF(TOK_BREAK, "break")DEF(TOK_RETURN, "return")DEF(TOK_FOR, "for")DEF(TOK_EXTERN, "extern")DEF(TOK_STATIC, "static")DEF(TOK_UNSIGNED, "unsigned")DEF(TOK_GOTO, "goto")DEF(TOK_DO, "do")DEF(TOK_CONTINUE, "continue")DEF(TOK_SWITCH, "switch")DEF(TOK_CASE, "case")..........................................................................................同時定義了條件編譯的相關內容
/*****/ / the following are not keywords. They are included to ease parsing / / preprocessor only /DEF(TOK_DEFINE, "define")DEF(TOK_INCLUDE, "include")DEF(TOK_INCLUDE_NEXT, "include_next")DEF(TOK_IFDEF, "ifdef")DEF(TOK_IFNDEF, "ifndef")DEF(TOK_ELIF, "elif")DEF(TOK_ENDIF, "endif")DEF(TOK_DEFINED, "defined")在i386-tok.h中定義了匯編的相關關鍵詞
/ ------------------------------------------------------------------ / / WARNING: relative order of tokens is important. // register /DEF_ASM(al)DEF_ASM(cl)DEF_ASM(dl)DEF_ASM(bl)DEF_ASM(ah)DEF_ASM(ch)DEF_ASM(dh)DEF_ASM(bh)DEF_ASM(ax)DEF_ASM(cx)DEF_ASM(dx)DEF_ASM(bx)DEF_ASM(sp)DEF_ASM(bp)DEF_ASM(si)DEF_ASM(di)DEF_ASM(eax)DEF_ASM(ecx)DEF_ASM(edx)DEF_ASM(ebx)DEF_ASM(esp)DEF_ASM(ebp)DEF_ASM(esi)DEF_ASM(edi) #ifdef TCC_TARGET_X86_64DEF_ASM(rax)DEF_ASM(rcx)DEF_ASM(rdx)…
…
在x86_64-asm.h中定義了64位匯編相關關鍵字
DEF_ASM_OP0(clc, 0xf8) / must be first OP0 /
DEF_ASM_OP0(cld, 0xfc)
DEF_ASM_OP0(cli, 0xfa)
DEF_ASM_OP0(clts, 0x0f06)
DEF_ASM_OP0(cmc, 0xf5)
DEF_ASM_OP0(lahf, 0x9f)
DEF_ASM_OP0(sahf, 0x9e)
DEF_ASM_OP0(pushfl, 0x9c)
DEF_ASM_OP0(popfl, 0x9d)
DEF_ASM_OP0(pushf, 0x9c)
DEF_ASM_OP0(popf, 0x9d)
DEF_ASM_OP0(stc, 0xf9)
DEF_ASM_OP0(std, 0xfd)
DEF_ASM_OP0(sti, 0xfb)
DEF_ASM_OP0(aaa, 0x37)
先從幾個重要文件入手。
libtcc.c/TCC - Tiny C CompilerCopyright (c) 2001-2004 Fabrice BellardThis library is free software; you can redistribute it and/ormodify it under the terms of the GNU Lesser General PublicLicense as published by the Free Software Foundation; eitherversion 2 of the License, or (at your option) any later version.This library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNULesser General Public License for more details.You should have received a copy of the GNU Lesser General PublicLicense along with this library; if not, write to the Free SoftwareFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA*/#include "tcc.h"/****/ / global variables / 使用GCC擴展還是TCC擴展/ use GNU C extensions / ST_DATA int gnu_ext = 1;/ use TinyCC extensions / ST_DATA int tcc_ext = 1;ST_DATA 結構標注TCC狀態。 / XXX: get rid of this ASAP / ST_DATA struct TCCState *tcc_state;/****/ 根據標志包含一些相應TCC文件。#ifdef ONE_SOURCE #include "tccpp.c" #include "tccgen.c" #include "tccelf.c" #include "tccrun.c" #ifdef TCC_TARGET_I386 #include "i386-gen.c" #endif #ifdef TCC_TARGET_ARM #include "arm-gen.c" #endif #ifdef TCC_TARGET_C67 #include "c67-gen.c" #endif #ifdef TCC_TARGET_X86_64 #include "x86_64-gen.c" #endif #ifdef CONFIG_TCC_ASM #include "tccasm.c" #if defined TCC_TARGET_I386 || defined TCC_TARGET_X86_64 #include "i386-asm.c" #endif #endif #ifdef TCC_TARGET_COFF #include "tcccoff.c" #endif #ifdef TCC_TARGET_PE #include "tccpe.c" #endif #endif / ONE_SOURCE /CONFIG_TCC_ASM打開內聯匯編的開關 /****/ #ifndef CONFIG_TCC_ASM ST_FUNC void asm_instr(void) {tcc_error("inline asm() not supported"); } ST_FUNC void asm_global_instr(void) {tcc_error("inline asm() not supported"); } #endif總結
以上是生活随笔為你收集整理的C指针原理(12)-C指针基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java飞机大战敌机消失_Shoot 飞
- 下一篇: C指针原理(13)-C指针基础