首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC 程式設計口訣:過馬路·左右看

     編輯:關於VC++

「過馬路,左右看」不只是兒童順口溜,更蘊含先觀察主要風險方向的邏輯。軟體開發同樣存在許多「口訣」,看似死板,實為前人踩坑總結的生存法則。本文以兩個經典 C 語言口訣為例,說明為何應照著做、而非硬要反其道而行。

口訣一:巨集常數/公式務必加括號

// 危險寫法
#define NUM_A 100
#define NUM_B 25 * 2
#define int_div(a, b) a / b

float c = int_div(NUM_A, NUM_B); // 預期 100/50=2,實際 100/25*2=8

// 正確寫法(照口訣做)
#define NUM_A (100)
#define NUM_B (25 * 2)
#define int_div(a, b) ((a) / (b))

巨集僅是文字替換,無運算子優先級概念。括號保護可確保組合語意不被外圍運算子撕裂。

口訣二:標頭檔只宣告、不定義

// a.h 錯誤示範:定義函式本體
int max(int a, int b) { return a>b?a:b; }

// main.c
#include "a.h"
#include "a.h" // 重複包含 → 重複定義編譯錯誤

即便加上 #ifndef 防禦,跨檔包含仍會導致連結階段重複定義:

// a.h (有 guard)
#ifndef _A_H_
#define _A_H_
int max(int a, int b) { return a>b?a:b; }
#endif

// b.c #include "a.h" → 產生 max 定義
// c.c #include "a.h" → 又產生一份 max 定義
// Link 時報錯:max 多重定義

正確做法:a.h 僅放 int max(int, int); 宣告,a.c 實作本體。若極度追求效率需在標頭檔實作,請加 inline 或 static inline(C99)。

口訣的境界

  1. 守:不懂原理也照做,避開明坑(不聽老人言,吃虧在眼前)
  2. 破:理解原理,知其然更知其所以然,靈活應用(心中有劍)
  3. 離:總結屬於自己的最佳實踐,超越固有口訣(否定之否定)

其他常見口訣速查

  • malloc 後必檢查 NULL、用完必 free、free 後指標置 NULL
  • 陣列下標從 0 起算、長度 N 最大下標 N-1
  • switch 每個 case 以 break 結尾(刻意貫穿需註釋)
  • 函式參數若為指標,內部修改內容需傳雙重指標或回傳值
  • 浮點數勿直接 == 比較,設定 epsilon 容差

口訣非教條,而是經驗結晶。初學者先守,進階者悟破,大師自離。願你早日達到「見招拆招、無招勝有招」的境界。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved