Time of Update: 2018-12-04
[Mac 10.7.1 Lion Intel-based x64 gcc 4.2.1]Q: 如何讓編譯的檔案可以被gdb調試?A: 可以加入-g參數。如下代碼,儲存為hello.c: #include <stdio.h>int main(){ printf("hello world!\n"); return 0;}編譯 gcc hello.c -o hello得到hello.使用 gdb
Time of Update: 2018-12-04
[Mac-10.7.1 Lion Intel-based x64 gcc4.2.1]Q: 結構體的本質是什嗎?A: 結構體就像一種粘合劑,將事物之間的關係很好地組合在了一起。Q: 結構體對象中各個變數的記憶體儲存位置和內建基本類型變數的儲存有什麼區別?A: 簡單地說,它們沒區別;複雜地說,它們有區別。簡單在於它們終究會儲存在記憶體中,複雜地說它們的位置可能有一些不同。如下:#include <stdio.h>#include <string.h>#define
Time of Update: 2018-12-04
[Mac 10.7.1 Lion Intel-based x64 gcc4.2.1]Q: 遞迴的本質是什嗎?A: 遞迴能夠運行,在於宇宙萬物之間的聯絡和電腦最終指令的完備性。換句話說,如果一個公式的參數不能和參數相關的公式有聯絡,那麼遞迴對它無解。Q: 舉些例子說明遞迴的無處不在吧。A: 比如需要計算一個數組中最大的數值。int find_max(int arr[], int
Time of Update: 2018-12-04
[Mac-10.7.1 Lion Intel-based x64 gcc4.2.1 GNU gdb 6.3.50-20050815 (Apple version gdb-1708)]Q: 給個簡單的代碼,然後進入調試狀態。A: 如下代碼,儲存為hello.c:#include <stdio.h>int main(){ int i = 2; printf("%d\n", i); return 0;}gcc編譯,需要有-g參數:gcc -g
Time of Update: 2018-12-04
[Mac 10.7.1 Lion Intel-based x64 gcc4.2.1 xcode4.2]大道理大家都會說,因為書上到處都會寫。不喜歡講大道理,道理自在真實的事實中。Q: 如果需要提供一個計算兩個元素較大值的模組,該提供什麼樣的代碼?A: 當然,不能輕易將元素認為是整形,這樣可能導致很多時候無法使用。既然如此,模板成為一種很好地選擇。Q: 就類似如下代碼嗎?template<class T>T max(T a, T b){ return a >
Time of Update: 2018-12-04
[Mac 10.7.1 Lion Intel-based x64
Time of Update: 2018-12-04
[Mac-10.7.1 Lion Intel-based, gcc 4.2.1]Q: 指標到底是什嗎?A: 有一天,你初到合肥,要到一個地方,但是路線不熟悉。遂問了一個路人,請問烏邦托在哪裡?路人答曰:向南走即可。這個回答就像指標一樣,告訴你一個方向。但是,到底向南多少,這就像是指標類型決定的大小。Q: 看到那個const修飾指標的時候,老是搞不清楚到底是指標是常量還是指標指向的變數是常量?A: 其實很簡單,採用從右向左的讀法即可搞定這些。如下例子:#include
Time of Update: 2018-12-04
作者:陳曦日期:2012-6-16 10:21:31 環境:[Mac 10.7.1 Lion Intel-based x64 gcc4.2.1 xcode4.2] 轉載請註明出處Q: 對於編譯過程的詞法分析,到底應該使用什麼方式?A: 可以肯定的是,必然要對需要處理的資料挨個字元判斷,然後在恰當的位置截斷,得到一個個的token.Q: 為什麼得挨個字元都判斷?A: 因為編碼採用原始碼的方式,你無法判斷程式員下一個字元是什麼。比如int
Time of Update: 2018-12-04
[Mac 10.7.1 Lion Intel-based x64 gcc4.2.1 xcode4.2 ]Q: 如何解決abs函數傳入一個整形數最小值返回溢出的數?#include <stdio.h>#include <stdlib.h>#include <string.h>#include <limits.h>#define PRINT_D(intValue) printf(#intValue" is %d\n",
Time of Update: 2018-12-04
[Mac 10.7.1 Lion x64 Intel-based gcc4.2.1 xcode4.2]Q: 解釋下標題吧。A: 依稀記得,寫一個數值絕對值的函數時,寫到第三個,實在感覺很痛苦,重複了這麼多遍,立刻體會了重載和STL的重要意義。intabs(int n){ return n < 0 ? -n : n;}longabs_long(long n){ return n < 0 ? -n : n;}doubleabs_double(double n){
Time of Update: 2018-12-04
[Mac 10.7.1 Lion Intel-based x64 gcc4.2.1 xcode4.2]Q: c++的預設輸入輸出和c的有什麼優缺點?A: 任何一種語言都會有自身最推薦的一套模式,因為設計者可能已經很認真考慮了。沒有必要說哪種最好,哪種很差,最好和很差都有條件限制的。不同的使用者總能找到一種最適合自身的方式。
Time of Update: 2018-12-04
作者:陳曦日期:2012-7-28 18:19:55環境:[Mac 10.7.1 Lion Intel i3 支援64位指令 gcc4.2.1 xcode4.2] 轉載請註明出處Q1: 宏這個東西真是很奇怪,為什麼我想將一句#include代碼用宏來替換,卻不行?#define INCLUDE_STDIO #include<stdio.h>INCLUDE_STDIOint main(){ return 0;}儲存為preprocess_header.cA:
Time of Update: 2018-12-04
[Mac 10.7.1 Lion Intel-based x64 gcc4.2.1]Q: c語言的異常處理可以使用什嗎?A: 可以使用setjmp和longjmp的組合。一個是儲存處理異常前執行的環境,一個是調回原來執行的環境。int setjmp(jmp_buf env);參數env的類型jmp_buf定義如下:/* * _JBLEN is number of ints required to save the following: * eax, ebx, ecx, edx, edi,
Time of Update: 2018-12-04
[Mac 10.7.1 Lion Intel-based x64 gcc4.2.1 xcode4.2]Q: c語言中的const和c++中的const關鍵字的含義是一樣的嗎?A: 不盡相同; c語言中const修飾的變數是不可更改的變數,它的核心還是變數;但是c++中const修飾的就是一個常量。比如,在c語言中使用const修飾的一個變數就不可以作為不可變長數組的元素個數,而c++就可以。Q:
Time of Update: 2018-12-04
[Mac 10.7.1 Lion Intel-based x64 gcc4.2.1 xcode4.2]Q: new操作符構造一個對象,它內部究竟調用了什嗎?A: 如下代碼:#include <iostream>using namespace std;#define COUT_ENDL(str) std::cout << #str << " is " << (str) << std::endl;class
Time of Update: 2018-12-04
作者:陳曦日期:2012-6-23 14:24:27環境:[Mac 10.7.1 Lion Intel i3 支援64位指令 gcc4.2.1 xcode4.2] 轉載請註明出處Q1: 編譯產生的可執行檔內部是如何被執行的?A: 當然,首先需要知道它的結構。先編寫一個簡單的程式,儲存為testForC.c:#include <stdio.h>#include <string.h>#define PRINT_D(longValue)
Time of Update: 2018-12-04
開頭語 上面一篇已經寫過,c語言不僅僅只是文法很好玩,很讓人捉摸不透,它的思想更是深奧,需要慢慢體會的。看了關於c語言的書籍不少於50本,每看一遍都感覺認識深了一點,但是終究還是無法完全理解它背後最深層的思想,只是在不斷地向它走近。正因為如此,下面的描述不會按照一個固定的說明文格式來編寫,而是採用對話的方式來將這個過程展現出來,這樣應該能更多地展示出c語言的思想。 格式: 問題(Question)將以 Q: 開頭, 回答(Answer)將以 A: 作為開頭。 Q:
Time of Update: 2018-12-04
[Win7 vs2010]Q:
Time of Update: 2018-12-04
作者:陳曦日期:2012-6-8 10:50:13環境:[Ubuntu 11.04 Intel-based x64 gcc4.5.2 CodeBlocks10.05 AT&T彙編 Intel彙編] 轉載請註明出處Q: 舉個例子吧。A: 下面的代碼的目標是計算1+2的值,最後放到變數temp中,並輸出:#include <stdio.h>#include <string.h>#define PRINT_D(longValue)
Time of Update: 2018-12-04
作者:陳曦日期:2012-6-12 11:31:12環境:[Mac 10.7.1 Lion Intel-based x64 gcc4.2.1 xcode4.2] 轉載請註明出處Q: 解譯器來源於什嗎?A: 如果說是廣義的解譯器,那麼可以把它理解成翻譯器,只要能將一種被看成原始的東西翻譯成需要的東西,處理的東西就可以被稱為解譯器。從程式設計語言角度,解譯器更多地表達的含義是,將一種初始狀態的資料(一般是文本)轉換成另外一種通常來說是較為容易理解的文本或者一種執行過程。