C 語言初學教材 - 第一章 註解

簡單的例子的程式碼如下

#include <stdio.h>

int main(void)
{
    int month, day, hour, min;
    char *name;
    
    month = 7;
    day = 27;
    hour = 9;
    min = 45;
    name = "kaiching";
    
    printf("\n\n今天是 %d 月 %d 日\n", month, day);
    printf("現在是上午 %d:%d\n", hour, min);
    printf("哈囉, %s!\n\n", name);
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:csimple.c
    功能:簡單顯示訊息的例子
    作者:張凱慶
    時間:西元2010年7月 */


我們把注意力放到第 21 到 26 行,也就是下圖中的註解 (comment) 區



註解就是用為輔助的說明文字,編譯器編譯時會忽略所有的註解文字。我們在簡單例子中所提供的註解為有關程式的整體資訊,小程式也許不太需要註解就能讀懂,但是當程式發展越來越大的時候,也就是動輒數百到數千、數萬行之時,適當的註解有助於程式後續的發展及維護。


通常軟體開發團隊會有既定的註解模式,諸如哪些地方、什麼時候等等,我們提供的註解是站在教學立場,以提供輔助說明為主。


C 語言的註解方式有兩種,第一種如簡單例子,利用一組斜線加星號 /* ,然後一直到另一組星號加斜線為止 */
/* 註解第一行 */
/* 註解第二行 */
/* 註解第三行 */


這種方式也可跨行
/* 註解第一行
   註解第二行
   註解第三行 */


也可加在任何程式碼之前或之後
int month, day, hour, min; /* 宣告為整數型態的變數 */
/* 注意,這是指標 */ char *name;


第二種方式為連用兩個斜線 //
// 註解第一行
// 註解第二行
// 註解第三行


這只能做單行的註解,同時只能放在無程式碼的單行或程式碼之後
int month, day, hour, min; // 宣告為整數型態的變數 
// 注意,這是指標 char *name;


上例中的字元型態指標變數 name 被註解化了,因此編譯時會發生錯誤。


註解化可作為發展程式時一種進行測試的技巧,例如除錯時不確定錯誤發生的地方,可將該處先註解化,然後先進行編譯,看是否能編譯成功,以期順利找出錯誤的地方。


問題與討論
  1. C 語言有哪兩種註解的方式?
  2. 註解的功能是什麼?什麼情況需要註解呢?
  3. 若將程式碼全部註解化,編譯時會發生什麼事呢?




7 則留言:

sjgau 提到...

// 這個,只能提供 一行的注解


/* 這個,可以提供 很多行的佇界,
但是,不能 nested
---
---
*/


#if 0
這個,可以提供 很多行的注解,
而且,可以 nested

#if 0
這是 內層的 nested 註解,
為何 需要 nested 註解呢?

恩,說來話長,。。。

#endif


#endif

Kaiching Chang 提到...

#if 0 到 #endif 之間的內容是告訴編譯器,這些內容不要被編譯,通常用於測試,把暫時無效的程式碼放到這裡,所要編譯的程式碼放到 #if 1 開頭的地方,因此幾個同時有 #if - #endif 部份的程式碼,就可以互相切換進行測試。這時候,巢狀註解 (nest comment) 的意義亦同,用於註解化程式碼進行測試。感謝提供意見,下一版的 C 語言教材會對這方面討論的更詳細 :)

匿名 提到...

//注釋是C99後的用法
ansi C 不吃喔 ^.<

Kaiching Chang 提到...

是的, // 是參用 C++ 的用法, C99 標準才納入
不過這得看所用編譯器所採用的標準
本站所有 C 程式的範例都採用 GCC 4.0.1 版編譯
// 或 /* */ 都沒問題的 :)

HARRY 提到...

請問 ///三條斜線的註解 代表什麼意思呢?

Kaiching Chang 提到...

/// 就是兩條斜線的註解,沒有特別的意思,很可能是輸入的時候不小心多按一次 / 而已 ^_^

小臭屁 提到...

///和//意義不同喔雖然都是註解