[問題] 在函式中重新宣告變數比較好還是用static

看板C_and_CPP (C/C++)作者 (沒有存在感的人)時間10年前 (2015/10/16 22:34), 編輯推噓5(506)
留言11則, 8人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux + gcc 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 這應該是基本問題,不過我google不到,所以請各位指教 若一個程式包含兩檔案:func.c, main.c main.c : int main(void) { int i; for (i=0; i<100000; ++i) test(); return 0; } func.c : 這個檔案含有函式 test() 寫法1 : void test(void) { int i; for (i=0; i<10000000; ++i) { ........(這邊跟i有關不重要) } } 寫法2: static int i ; // (這邊如果沒用static會不會跟main.c的i有互相干擾的問題?) void test(void) { for (i=0; i<10000000; ++i) { ........(這邊跟i有關不重要) } } 請問這兩種寫法哪種比較好? 把常用變數的reference留在同樣位子會不會比一直宣告清除來的好? 謝謝 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 86.200.195.25 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1445006082.A.2EB.html

10/16 23:17, , 1F
static 不是都寫在含數內的嗎XD= =?
10/16 23:17, 1F

10/16 23:18, , 2F
如果真的是那麼時常呼叫的話, 區域變數多半會在相近的位置
10/16 23:18, 2F

10/16 23:18, , 3F
就算稍有不同, 記憶體快取都是一個區塊為主
10/16 23:18, 3F

10/16 23:19, , 4F
因此不會有太頻繁的 cache miss
10/16 23:19, 4F

10/16 23:19, , 5F
所以就放心宣告區域變數吧
10/16 23:19, 5F

10/17 01:27, , 6F
static 寫在 global 表示不匯出。其他 source 看不到
10/17 01:27, 6F

10/17 02:35, , 7F
感謝
10/17 02:35, 7F

10/17 09:26, , 8F
如果這個func未來被多行緒呼叫時,static宣告的會死很慘
10/17 09:26, 8F

10/17 14:02, , 9F
i很便宜 不要在小地方那麼摳門好嗎
10/17 14:02, 9F

10/17 14:42, , 10F
這種寫法沒省多少空間時間,又很危險
10/17 14:42, 10F

10/27 15:21, , 11F
i很便宜是什麼東西啦XDDD
10/27 15:21, 11F
文章代碼(AID): #1M8Gi2Bh (C_and_CPP)
文章代碼(AID): #1M8Gi2Bh (C_and_CPP)