2008年3月29日 星期六

C的內建function與macro

由於NS2是由OTcl與C所架構出來的,在NS2底層的code大部分都是用C所完成.在我研究其.16底層的code時,有時都會看到一些C內建的function或macro,例如strcmp(),assert()...等等,以下我將簡述這些function與macro的基本功能:
1. int strcmp(string s, string t)---
功用: 字串之間的比較.此function主要是判斷s與t之間的大小,若是s = t則傳回整數0;若s大於t則傳回任一正數;若s小於t則傳回任意負數.

2. assert(condition)---
功用: 防止程式因某些condition而出現嚴重錯誤. assert()主要是判斷condition是否滿足開發者所設定的要求,若是滿足則可繼續執行後續的程式,反之,終止整個程序.另外ASSERT()與assert()兩者主要差別是前者只在Debug模式中才有效,後者則是在Debug與Release兩種模式中都有效.

3. atof(const char *sc)---
功用: 字元轉型. atof()主要會先scan參數sc,將其面空白符號先跳過,直到遇上數字或是正負號才開始進行轉換.遇到非數字或是參數sc結束時才會停止轉換,並將結果傳回.除此之外,類似的function還有: atoi(), atol(), strtod(), strtol(), strtoul().

4. memset(void *s, char ch, unsigned n)---
功用: 將s中的字元取代成ch,取代長度為n. memset()可應用於字元陣列的清空...等等,目的在於將A,依自己所需取代成B.以下為一範例: #include
#include
void main( void )
{
char buffer[] = "This is a test of the memset function";
printf( "Before: %s\n", buffer );
memset( buffer, '*', 4 );
printf( "After: %s\n", buffer );
}

結果:
Before: This is a test of the memset function
After: **** is a test of the memset function

5.malloc/free ---
功用:動態配置/釋放記憶體. malloc與new的用法類似,不一樣的地方在於使用malloc時不能同時給予初值.以下為malloc格式與範例:
格式:
變數型態* point = (變數型態*) malloc (記憶體空間大小);
範例:
int* p = (int*) malloc (sizeof(int));
free主要是將一配置的記憶體空間,經由所輸入的記憶體空間之起始指標來加以釋放.以下為其格式與範例
格式:
free(point);
範例:
free(*p);

6. sqrt()---
功用: 將傳入之參數開根號.

7. int abs()---
功用: 將傳入的參數取絕對值. 另外還有應付回傳各種型態的abs, 如: double cabs(), double fabs(), long labs()等.

若是還有遇到其他的function或macro我會繼續更新此篇文章~
Continue......

沒有留言: