MSB = Most Significant Bit
簡單來說等於最左邊的 Bit,第 2^{n-1} 位的 Bit
LSB = Least Significant Bit
簡單來說等於最右邊的 Bit,第 0 位的 Bit
MS Byte、LS Byte
Bit 換成 Byte 的...
2020年4月19日 星期日
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
-
lvalue 、rvalue 基本概念 左值 (lvalue) : 一個佔據某個特定記憶體的值。 右值 (rvalue) : 一個 expression 結束後就消失的值。 基本上這兩個定義包含了全部的值,非左即右,非右即左。 int var = 4; // v...
-
You try to hold me down so I became a soldier 你想要控制所以我成為了戰士 Built up all theses walls and now I'm climbing over 監牢般的城牆如今我已越過 Thos...
-
Ooh, don't we look good together? 我們看起來是不是很棒? There's a reason why they watch all night long 這就是為何他們整晚都看著我們的原因 Yeah, kn...
-
Job Company : Houzz Job : Back-End Software Engineer Source : Recruiter on LinkedIn Result : 止步二面 Summary 1. 英文程度不佳 :...
-
Don't lie, I know you've been thinking it 別說謊了,我知道你一直很渴望 And two times, you let it slip from your lips 兩次了,你那不想讓人聽見的低語 You...
-
報告在製作時,一定會遇到要字串轉數字 在 BCB 裡有方便的函式 常見的有 String str = "123" int x = StrToInt(str); float y = StrToFloat(str); 但有時候...
-
BCB 選擇路徑(資料夾) 工作關係要將各式各樣的資料彙整並輸出 各式各樣的資料都放在同一目錄下 所以在設計程式就必須設計可以給使用者選擇目錄 但BCB10似乎沒有這種元件 (其實有 DirectoryListBox 但我駕馭不了) 於是Google發現大家用的...
-
BCB TDateTime 時間操作及應用 在 BCB 裡有關時間的操作幾乎都是與 TDateTime 這個 Class 相關 若找不到相關資料可以用 BCB 的 HELP ( 游標移到要查詢的函式或Class 並按 F1 ) 介紹幾個個人有在用的函式 TDate...
-
Python Google API - Python 學習筆記 Google API - Python 學習筆記 - Upload post
-
warning: left shift count >= width of type 一般來說,就是 shift 的 bit 大於資料型態的 bit 數。但有時使用 unsigned long 仍然會出錯,因為 unsigned long 會依照系統的不同,有...