2020年4月19日 星期日

Computer Science - MSB LSB

MSB = Most Significant Bit     簡單來說等於最左邊的 Bit,第 2^{n-1} 位的 Bit LSB = Least Significant Bit     簡單來說等於最右邊的 Bit,第 0 位的 Bit MS Byte、LS Byte     Bit 換成 Byte 的...

C 語言 - function pointer 函數指標

function pointer 概念     基本上有 data 的 pointer 就會有 function 的 pointer。 正確的 ( 回傳 int 的 function ) int (*pfi)(); 錯誤的 ( 回傳 int pointer 的 function ) int *pfi(); function pointer 宣告     利用 typedef,然後一樣用 & 取 function pointer extern int f1(); typedef int (*funcptr)(); ...

C 語言 - size_t 及各個常見類型

typedef unsigned int size_t // 通常定義在 stddef.h int8 : -128 ~ 127 int16 : -32768 ~ 32767 int32 : -2147483648 ~ 2147483647 int64 : -9223372036854775808 ~ 9223372036854775807 uint8 : 0 ~ 255 uint16 : 0 ~ 65535 uint32 : 0 ~ 4294967295 uint64 ...

C 語言 - malloc、free 與 calloc

malloc 跟 free     一般來說要將函式結果回傳是不能用 pointer,因為一旦函式結束 stack 的空間就會被釋出,所以 pointer 會指向的資料是危險的。這時就會先動態地宣告一個位址給 pointer,但這類的記憶體會被存放在 heap 而非 stack,所以開發者必須自行釋放。 pointer.c void showMalloc(int pointerValue) { int *p = malloc(sizeof(int)); printf("Address...

C 語言 - #ifndef

#ifndef 用途 在 .h 檔確保只會被編譯一次 #ifndef HELLO_H // 有些人會定義成 _HELLO_H_ #define HELLO_H // 但目的就是不會被重複編譯 #include <stdlib.h> int helloIntro(char** str); int main() __attribute__((weak)); #endi...

C 語言 - 編譯多個含有 main function 的 C code

編譯多個含有 main function 的 C code     理論上是不行,GCC 無法自行繞過某某函式去編譯,通常是給條件去讓編譯器來達到 "只有一個你想要的 main function" 編譯目的。有人會問為什麼會有多個 main function,我想多半是因為想 Debug。 1. 利用 #ifdef other.c #ifdef DEBUG int main () { return 0; } #endif gcc gcc -DEBUG other.c -o other.x 2. 利用...

2020年4月14日 星期二

C 語言 - sprintf / snprintf

sprintf (char *s, const char *format, ...)     C 語言並沒有其他語言方便的 container 去作字串轉換,所以 sprintf 就顯得強大許多。原理就是 printf 但輸入到字串。但會有 overflow 的 issue 產生。 int main() { char str[5]; sprintf(str, "ABC"); printf("%s\n", str); // output : ABC return 0; } int...

2020年4月13日 星期一

C 語言 - Linux System Log

Linux - System Log     Linux 當事件發生會產生 log,通常會存在 /var/log 底下。優先度如下。     debug     info     notice     warning     err     crit     alert     emerg/panic C 實作 - void syslog(int priority, const char *format,...

2020年4月12日 星期日

C 語言 - enum

enum - 列舉 enum direction { North, // 0 South, // 1 East, // 2 West // 3 }; 可搭配 typedef typedef enum direction Direction; enum direction { North, South, East, West }; int main(void) { Direction...

C 語言 - #define

# define - 文本替換 #define Max 10 # define - 定義函式 #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define MINUS(a,b) a - b // 注意這個 a-b 沒加括號很容易出錯 #define MINUS(a,b) (a - b) // Good. # define - 多行定義 #define MACRO(arg1, arg2) \ do \ { \ ...

C 語言 - __attribute__((weak))

使用的情境     假設我們不知道外部是否會提供 foo() 這個 function,若沒有則用自己的 foo()。 extern int func(void); int __attribute__((weak)) func(void) { return 0; } 備註 - 不會在動態函式庫 (.so) 中生效     string.so void real_func() { printf("strong func\n"); }     weak.so ...

C 語言 - unsigned char

char 與 unsigned char 的區別     單看兩個變數類型是沒有差別的, char -128 ~ 127, unsigned char 0 ~ 255,範圍大小一樣,並沒差別。唯一差別是在賦值的時候。 賦值的時候 char 與 unsigned char 的區別     (signed) char 有符號 bit ,這會導致你在賦予值時,(signed) char 會依照情況去賦予值。 void unsignedcharTest(unsigned char value) { char c =...

C 語言 - static

static - Introduction      靜態變數(Static Variable)在電腦編程領域指在程式執行前系統就為之靜態分配(也即在執行時中不再改變分配情況)儲存空間的一類變數。與之相對應的是在執行時只暫時存在的自動變數(即局部變數)與以動態分配方式取得儲存空間的一些物件,其中自動變數的儲存空間在呼叫棧上分配與釋放。 static + 變數        (1) 宣告在 function 內 ( 記憶體模式 )     這是比較經典的 Case,因為 Static 參數不會隨著 function...

Popular Posts