我在看朋友寄給我的一些代碼,他說:「它編譯,但不工作」。我看到他用的功能,而括號,是這樣的:爲什麼C++編譯器在使用沒有括號的函數時抱怨?
void foo(){
cout<< "Hello world\n";
}
int main(){
foo; //function without parentheses
return 0;
}
首先我說的是「使用括號,你必須」。然後我測試了代碼 - 它確實編譯了,但是執行時不起作用(沒有顯示「Hello world」)。
那麼,它爲什麼編譯(編譯器沒有任何警告GCC 4.7),但不起作用?
它確實工作。 'foo'被視爲一個函數指針。 'foo;'這一行只是一行無效的行。如果您最大限度地發出警告,您應該無條件地收到關於聲明的警告。 – RedX
我看* *警告:語句是一個引用,而不是調用'foo'「*和*」警告:語句無效「*。您可能希望使用-Wall -Wextra – Flexo
進行編譯(對於將來的問題,爲了使您的示例完整,值得放入#include和任何名稱空間內容) –
Flexo