成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

“C語言” 讀書札記之[編譯執行]

開發 前端
C語言的好處是各種體系結構的計算機都有各自的C編譯器,可以把C程序編譯成各種不同體系結構的機器指令,這意味著用C語言寫的程序只需稍加修改甚至不用修改就可以在各種不同的計算機上編譯運行。

介紹

現在C語言跨的領域非常之多,如游戲、嵌入式、智能電器等。為什么不直接用匯編或機器語言直接寫呢?原因是匯編和機器語言受到計算機體系結構的影響。直接用某種體系結構的匯編或機器指令寫出來的程序只能在這種體系結構的計算機上運行。

C語言的好處是各種體系結構的計算機都有各自的C編譯器,可以把C程序編譯成各種不同體系結構的機器指令,這意味著用C語言寫的程序只需稍加修改甚至不用修改就可以在各種不同的計算機上編譯運行。

hello,world

我們從簡單hello,world開始——有人說了,又來了,這個“hello,world”,好多博友都寫這種東西煩不煩?呵呵,那我寫的也許跟他們說的不一樣呢?或者理解的跟別人有不一樣的地方。

先寫個程序我們看看。

源程序(或者源文件):是程序員通過文本編輯器創建并保存的文本文件。源程序實際就是由0和1組成的位序列,這些位8個一組,成為字節,每個字節通過ASCII字符集(大部分是)對應一個文本字符。

 [[80334]]下面是上面程序對應的16進制數字表示

 [[80334]] 在終端輸入man ascii看看ascii表

#p#

操作步驟:

[[80334]]

 [[80334]]查看16進制格式

  [[80334]]回復到文本格式

  [[80334]]我們看看對應的二進制是什么樣的?——這個也是在磁盤中的存儲狀態。

總結:

系統中所有的信息——包括磁盤文件、存儲器中的程序,存儲器中存放的用戶數據以及網絡上傳送的數據,都是由一串比特表示的。

思考:

同樣的一套字節序列可能在不同的上下文中表示一個整數、浮點數、字符串或者機器指令。——這取決于數據對象的上下文。

我們該做什么?

做為程序員,我們需要了解數字的機器表示方式,因為它們與常見的整數和實數是不同的。

使用參考:在Linux下使用vim配合xxd查看并編輯二進制文件

#p#

翻譯

源程序是能夠被人讀懂的,為了能在系統上運行,我們需要把C語句通過其他程序轉化為一系列的低級機器語言指令。然后這些指令按照一種稱為“可執行目標程序“的格式打包好,并以二進制磁盤文件的形式存放起來。

在Linux系統上,從源文件到目標文件(可執行目標程序文件)的轉化是由編譯器驅動程序完成的。如下圖:

編譯系統

我們用GCC工具觀察每個階段。(GCC:GNU Compiler Collection,GNU編譯器套裝)

先贈送一張gcc命令選項圖

 [[80337]]

預處理階段

[[80334]]查看main.i的部分源碼

總結:預處理器(cpp)根據以字符#開頭的命令,修改原始C程序,結果得到了另一個C程序(還是C程序),通常以i做為文件擴展名。

編譯階段

 [[80334]]查看main.s的源碼

總結:將C語言文本文件翻譯成匯編語言文本文件。——匯編語言是非常有用的,因為它為不同高級語言的不同編譯器提供了通用的輸出語言。

匯編階段

 [[80334]]打開源代碼,注意此時為二進制磁盤文件,還有注意操作步驟

[[80334]]此時為亂碼,需要進行:%!xxd操作

[[80334]]查看指令

總結:匯編器(as)將main.s翻譯成機器語言指令,把這些指令打包成為一種“可重定位目標程序“的格式,并將結果保存到main.o文件中,main.o是二進制文件,它的字節編碼是機器語言指令而不是字符(所以用文本編譯器看會出現亂碼)。

鏈接階段

  [[80334]]按照匯編階段操作,查看部分指令碼

總結:程序中調用了printf函數,它是C標準庫的一個函數,printf函數存在于一個名為printf.o的單獨的預編譯目標文件中。連接器(ld)負責把printf.o的預編譯目標文件進行并入,結果就得到a.out文件。

NOTE:a.out是可執行的目標文件,而main.o是可重定位目標程序文件。——可執行目標文件加載到系統存儲器后,由系統負責執行。而可重定位目標程序文件是提供給鏈接器使用,執行并入操作。

總結

這一篇主要是學習gcc編譯器的編譯過程,對整個過程有所熟悉。如果有好的知識點,望大家賜教。

#p#

vim配置分享

  1. " An example for a vimrc file.  
  2. "  
  3. " Maintainer:   Bram Moolenaar <Bram@vim.org>  
  4. " Last change:  2006 Nov 16  
  5. "  
  6. " To use it, copy it to  
  7. "     for Unix and OS/2:  ~/.vimrc  
  8. "         for Amiga:  s:.vimrc  
  9. "  for MS-DOS and Win32:  $VIM\_vimrc  
  10. "       for OpenVMS:  sys$login:.vimrc  
  11.  
  12. " When started as "evim", evim.vim will already have done these settings.  
  13. if v:progname =~? "evim" 
  14.   finish  
  15. endif  
  16.  
  17. " Use Vim settings, rather then Vi settings (much better!).  
  18. " This must be first, because it changes other options as a side effect.  
  19. set nocompatible  
  20.  
  21. " allow backspacing over everything in insert mode  
  22. set backspace=indent,eol,start  
  23.  
  24. if has("vms")  
  25.   set nobackup      " do not keep a backup file, use versions instead  
  26. else 
  27.   set nobackup      " keep [NO] backup file  
  28. endif  
  29. set history=250     " keep 250 lines of command line history  
  30. set ruler       " show the cursor position all the time  
  31. set showcmd     " display incomplete commands  
  32. set incsearch      " do incremental searching  
  33. set nu  
  34.  
  35. " For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries  
  36. " let &guioptions = substitute(&guioptions, "t", "", "g")  
  37.  
  38. " Don't use Ex mode, use Q for formatting  
  39. map Q gq  
  40.  
  41. " In many terminal emulators the mouse works just fine, thus enable it.  
  42. set mouse=a  
  43.  
  44. " Switch syntax highlighting on, when the terminal has colors  
  45. " Also switch on highlighting the last used search pattern.  
  46. if &t_Co > 2 || has("gui_running")  
  47.   syntax on  
  48.   set hlsearch  
  49. endif  
  50.  
  51. " Only do this part when compiled with support for autocommands.  
  52. if has("autocmd")  
  53.  
  54.   " Enable file type detection.  
  55.   " Use the default filetype settings, so that mail gets 'tw' set to 72,  
  56.   " 'cindent' is on in C files, etc.  
  57.   " Also load indent files, to automatically do language-dependent indenting.  
  58.   filetype plugin indent on  
  59.  
  60.   " Put these in an autocmd group, so that we can delete them easily.  
  61.   augroup vimrcEx  
  62.   au!  
  63.  
  64.   " For all text files set 'textwidth' to 78 characters.  
  65.   autocmd FileType text setlocal textwidth=78  
  66.  
  67.   " When editing a file, always jump to the last known cursor position.  
  68.   " Don't do it when the position is invalid or when inside an event handler  
  69.   " (happens when dropping a file on gvim).  
  70.   autocmd BufReadPost *  
  71.     \ if line("'\"") > 0 && line("'\"") <= line("$") |  
  72.     \   exe "normal! g`\"" |  
  73.     \ endif  
  74.  
  75.   autocmd VimLeave *  
  76.     \ if has("mksession") && exists("v:this_session") && v:this_session != "" |  
  77.     \   exec "mksession!" v:this_session |  
  78.     \ endif  
  79.  
  80.   augroup END  
  81.  
  82. else 
  83.  
  84.   set autoindent        " always set autoindenting on  
  85.  
  86. endif " has("autocmd")  
  87.  
  88. " Convenient command to see the difference between the current buffer and the  
  89. " file it was loaded from, thus the changes you made.  
  90. command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis  
  91.         \ | wincmd p | diffthis  
  92.  
  93. " Add by Journeylee to make things more easily  
  94. set softtabstop=4  
  95. set shiftwidth=4  
  96. set tabstop=4  
  97. set noexpandtab  
  98. set smarttab  
  99. set showmatch  
  100. set foldenable  
  101. set autoindent  
  102. set smartindent  
  103. set cindent  
  104. set foldmethod=marker  
  105. set background=dark  
  106. set nobackup  
  107. set encoding=utf-8  
  108. language en_US.utf8  
  109. set fileencodings=ucs-bom,utf-8,gbk,latin1  
  110. set fileformats=unix,dos,mac  
  111. set fileencoding=utf-8  
  112. set fileformat=unix  
  113.  
  114. set fileformat=unix  
  115. set matchtime=15  
  116.  
  117. " Make shift-insert work like in Xterm  
  118. map <S-Insert> <MiddleMouse>  
  119. map! <S-Insert> <MiddleMouse>  
  120.  
  121. " let xterm16_brightness = 'default'     " Change if needed  
  122. " let xterm16_colormap = 'allblue'       " Change if needed  
  123. " colo xterm16   
  124. "不使用swap文件  
  125. map <F5> :!php -l %<CR>  
  126. "set runtimepath+=/home/zhoubc/opt/vim/doc  
  127. "autocmd BufNewFile,Bufread *.ros,*.inc,*.php set keywordprg="help"  
  128.  
  129. let g:winManagerWindowLayout='TagList|FileExplorer' 
  130. let g:winManagerWidth=30  
  131. nmap  wm :WMToggle 

【編輯推薦】

  1. “C語言” 讀書札記之[程序和編程語言]
  2. 淺談前端開發的水有多深
責任編輯:張偉 來源: 川山甲的博客
相關推薦

2012-06-25 10:14:10

C語言

2012-06-23 18:13:39

C語言

2012-07-12 14:06:10

C語言

2012-06-28 10:38:45

Web

2012-06-20 15:01:04

Web

2009-08-25 16:32:24

C#語言

2013-09-03 09:35:10

2009-08-26 17:22:09

C#語言

2010-05-06 10:01:26

nginx負載均衡

2023-11-08 13:17:00

Python解釋型語言

2010-01-18 09:39:25

C++語言

2010-02-03 17:29:06

Python編譯

2015-03-10 14:05:46

程序員軟件架構讀書筆記

2022-07-11 10:45:37

插樁性能優化打包

2009-06-11 14:11:33

代碼混淆Java反編譯

2009-09-28 09:32:01

編譯語言C#

2010-02-25 10:46:44

Linux操作系統

2010-08-27 13:07:00

CSS規則

2011-08-10 17:04:43

JavaScript

2011-08-30 16:55:31

MTK開發編譯
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本午夜在线视频 | 国产精品射| 午夜精品| 欧美日韩亚洲在线 | 一区二区在线 | 国产精品99久久久久久宅男 | 一级黄色毛片a | 亚洲一区二区三区视频免费观看 | 国产一区二区电影 | 国产精品免费视频一区 | 亚洲国产区 | 中文字幕 视频一区 | 亚洲成人国产综合 | 天天操人人干 | 亚洲91精品 | 欧美v片| 国产精品毛片一区二区在线看 | 日韩在线视频一区二区三区 | 国产精品国产成人国产三级 | 欧美一区二区三区视频在线观看 | 日本黄色不卡视频 | 国产欧美久久一区二区三区 | 在线一区| 中文字幕在线精品 | 一区二区久久电影 | 亚洲一区二区三区四区在线观看 | 欧美精品在线播放 | 国产精品久久久久久久久久久免费看 | 成人伊人| 伊人网站在线 | 国产做a爱免费视频 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 亚洲成人免费在线观看 | 玖玖视频国产 | 在线观看av网站永久 | av片网 | 农村妇女毛片精品久久久 | 国产高清视频在线观看播放 | 天堂免费看片 | 九九色九九 | 国产日韩精品在线 |