Google Code Prettify

2011年4月23日 星期六

#define 用法

在書上都會看到一些 #define的用法
但是通常都很短
但是再寫WINDOWS程式的時候
常會看到 以下這種寫法

#define CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y,\ nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\ CreateWindowExA(0L, lpClassName, lpWindowName, dwStyle, x, y,\ nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)


所以上網查了一下 原來 #define 有多行的用法

3.define的多行定義
define可以替代多行的代碼,例如MFC中的宏定義(非常的經典,雖然讓人看了噁心)
#define MACRO(arg1, arg2) do { \
/* declarations */ \
stmt1; \
stmt2; \
/* . .. */ \
} while(0) /* (no trailing ; ) */
關鍵是要在每一個換行的時候加上一個"\

2011年4月22日 星期五

callBack function 試做

找了一下資料 發現網路上的範例都寫得頗難。

自己寫看看

#include<iostream>
using namespace std;

typedef int(*myFunc)(int a);

int print(int a)
{
a=a+10;
return a ;
}

int test(myFunc my)
{
int a=9;
int b=0;
b=my(a);
return b;
}

int main()
{
int num=0;
num=test(print);
cout<<num<<endl;
system("pause");
return 0;
}
===================================================
簡單的說,如果你使用了某個function,那麼你就是『call』了一個function。如果系統或是函式是要求你給一個function pointer,這個function pointer指到一個實際的函式(多半這個函式是你自己寫的)。然後它會在適當的時間呼叫此function,則此function就是所謂的 callback function。因為這個function是被『callback』了。

=========================================================
文章取自:井民全
Callback = Call back = Call me back when you have done the job = 回電﹝回個電話﹞ = 做好了請叫我一下。 Call back 是英語世界的日常用語。 有一天,內地的A想請港口的B搬貨櫃,A拿起手機呼叫B: A: 呼叫B!請把港口的貨櫃搬上輪船,搬完後請回電告訴我一共搬了幾櫃。 B: 電話幾號? A: 0123456789。 於是B開始搬貨櫃,搬完後打了那個電話號碼,告訴A一共搬了幾櫃。 在程式裡面使用C實作這種call back機制時,A必須傳一個function pointer 給B,讓B可以使用這個function pointer來通知A。這個function pointer 內含某個function的位址,而這個function就被稱為callback function, 並不是因為這個function的長相特別,只是因為它的用途是特別設計給B來 回呼而已。 先了解function pointer的使用,就可以了解如何使用callback了。 有些人對於C語言沒給callback function一個特別的長相有點不滿意,所以 特別定製了一個modifier﹝修飾字﹞叫做CALLBACK,冠在函式名稱前面 以顯名號,就是要告訴看程式碼的人:「這是一個callback function! 這樣 講你應該就知道它是做什麼的了吧。請看看文件或找找程式碼,到底是誰會 傳這個callback function給哪些人......這可是精心設計的。機關重重,請 小心謹慎。」 會需要設計出callback機制的場合,通常比較特殊,例如 iterative processing 或非同步的程式。Tree traversal是iterative processing的一個例子,當然 也只有把tree traversal通用化才會使用到callback。非同步就例如non-blocking socket、non-blocking I/O、或多執行緒程式了。

2011年4月19日 星期二

簡單的atoi實作

上班的時候,剛好有做到類似的程式
記錄下來,比較不會忘記。
簡單的做一下,將字串轉成數字。

#include <stdio.h>
#include <string.h>
#include<iostream>

using namespace std;

int myatoi(const char*);
void main()
{
char test[48]="12345";
int num=0;
num=myatoi(test);
cout<<num<<endl;
system("pause");
}

int myatoi(const char* str)
{
int result=0;
while(*str!='\0')
{
result*=10;
//把字元-'0' 就會變成數字 和 -48同意義
result+=*str-'0';
str++;
}
return result;
}

2011年3月11日 星期五

設計理念

我一直認為企劃在設計一個機制的時候,應該要有個人的設計理念才去寫出文件,而不是只是為了寫出文件而寫。
當交付文件給程式人員執行時,應該清楚傳達各個必要的設計理念。如此一來在程式實做出來之後,就不會一改再改。
營運如果有要求要改變甚麼地方,就應該傳達給營運了解當初的設計概念,而不是人家說改就改。
程式一直不斷的改來改去,在時間不多的情況下,往往為了配合修改而出現特殊寫法。久而久之就有很多的弊端出現。不可不防。