# 2024q1 Homework1 (lab0)
contributed by < `gillwei` >
## 佇列實作及改進過程
### 開發環境
:::danger
無論標題和內文中,中文和英文字元之間要有空白字元 (對排版和文字搜尋有利)
:::
忘記在哪裡看到, 這門課最好是用實體機器下載 Linux, 例如切割硬碟的方式來做, 我本來以為可以在USB隨身碟上灌 Linux Ubuntu 使用, 不過後來發現這樣只能用來 "Try ubuntu" 或是安裝 Ubuntu 使用, 再加上目前使用的是公司的電腦不太方便自己切割硬碟, 所以本次作業還是先使用 Virtual box 的方式
```
$gcc --version
gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```
在預期目標 + 開發環境設定的操作中, 使用 clone cppcheck source code and build, ```$make test``` 沒有問題, 但是在```$git commit -a```
之後會出現下面的 error
```information: valueflow analysis is limited in log2_lshift16. use --check-level=exhaustive if full analysis is wanted. [checklevelnormal]```
看了同學 [Jackiempty](https://hackmd.io/@Jackiempty/HJv_2m7np) 也有一樣的問題, 退回到 cppcheck 2.7 版解決了
再來測試在 lab0"預期目標 + 開發環境設定"裡面修改 queue.c, 做一次commit and push 來測試 [commmit連結](https://github.com/gillwei/lab0-c/commit/da394f6b717c5c5187c74a6a862fef9762b0a890)
### queue.c 實作
首先是新增空的 queue: `*q_new()`
在[你所不知道的 C 語言: linked list 和非連續記憶體](https://hackmd.io/@sysprog/c-prog/%2Fs%2FSkE33UTHf#LIST_HEAD--INIT_LIST_HEAD)裡面有寫到 INIT_LIST_HEAD 查詢code裡面發現 list.h 裡面已經有了, 所以就可以直接拿來用, 而中間有一次```git commit -a```沒過, 是因為 malloc 新的 head pointer 的時候使用
:::danger
避免過多的中英文混用,已有明確翻譯詞彙者,例如「鏈結串列」(linked list) 和「佇列」(queue),就使用該中文詞彙,英文則留給變數名稱、人名,或者缺乏通用翻譯詞彙的場景。
:::
```c
struct list_head *new_head = malloc(sizeof(list_head));
```
在後面的```sizeof(list_head)``` 會出錯, 因為沒有 initialized
:::danger
1. 無論標題和內文中,中文和英文字元之間要有空白字元 (對排版和文字搜尋有利)
2. 改進你的漢語表達。
:::