在C++語言中聲明一個這樣的函數: int function(void) { return 1; } 則進行下面的調用是不合法的: function(2); 因為在C++中,函數參數為void的意思是這個函數不接受任何參數。
我們在Turbo C 2.0中編譯: #include "stdio.h" fun() { return 1; } main() { printf("%d",fun(2)); getchar(); } 編譯正確且輸出1,這說明,在C語言中,可以給無參數的函數傳送任意類型的參數,但是在C++編譯器中編譯同樣的代碼則會出錯。在C++中,不能向無參數的函數傳送任何參數,出錯提示“'fun' : function does not take 1 parameters”。
所以,無論在C還是C++中,若函數不接受任何參數,一定要指明參數為void。
規則三 小心使用void指針類型
按照ANSI(American National Standards Institute)標準,不能對void指針進行算法操作,即下列操作都是不合法的: void * pvoid; pvoid++; //ANSI:錯誤 pvoid += 1; //ANSI:錯誤 //ANSI標準之所以這樣認定,是因為它堅持:進行算法操作的指針必須是確定知道其指向數據類型大小的。 //例如: int *pint; pint++; //ANSI:正確 pint++的結果是使其增大sizeof(int)。
但是大名鼎鼎的GNU(GNU's Not Unix的縮寫)則不這么認定,它指定void *的算法操作與char *一致。