Q
c函數接口問題
2
A
回答
6
聲明函數時不需要指定參數名稱,只是一個類型。 Foo
在這種情況下是一種類型。
extern "C"
告訴編譯器它應該使用一個C風格的符號,這或多或少意味着它不會使用名稱修飾(C++使用它來允許多個函數共享一個名稱,但使用不同的參數集或名稱空間) 。
1
這是一個函數聲明。你不需要有一個變量名。 第二個確實有一個類型,它是Foo。
2
一個沒有變量名,另一個沒有類型。這是如何工作的?
在函數聲明中(甚至在定義中),變量名是可選的,在你的情況下,Foo
是一個類型,它不是變量名!
即使功能f
沒有提及參數名稱,以下程序也是完全有效的!
int f(int)
{
cout << "f(int) is called";
}
int main()
{
f(100);
}
1
這只是一個prototype
。也就是說,調用該函數需要什麼,但不包含說明函數實際執行的代碼。
所有編譯器需要知道的生成調用代碼的函數的參數類型,函數名稱和返回類型。它不需要知道參數的名稱。第二個參數是Foo
。這不是名稱,那是類型。
1
通過使用extern「C」您可以將C++程序鏈接到C函數。
在你上面的例子中,它將關閉名稱mangling for func,以便您可以鏈接到由C編譯器編譯的代碼。
C++編譯器需要使用名稱修飾來區分具有相同名稱的不同功能。名稱修改是C++在調用鏈接器之前將函數名稱更改爲函數簽名的規則。
0
你的假設是不正確的:這兩個參數有自己型指定的,他們都沒有指定的名。在這種情況下Foo
是一種類型(struct
?)已經在某處定義。
參數沒有名稱不是問題,因爲這是一個函數的聲明:它只用於讓編譯器知道函數的簽名(參數的數量和類型,以及返回類型)。如何命名形式參數並不重要(或者它們是否被命名)。該信息僅在您即將編寫函數體時纔有用。
相關問題
- 1. C#接口問題
- 2. C#接口問題
- 3. C#接口問題
- 4. C#接口問題
- 5. 接口函數C#
- 6. C++ VB6的接口問題
- 7. C++接口的問題
- 8. C++接口設計問題
- 9. 串口+ C#數據接收問題
- 10. C++函數問題
- 11. 接口問題
- 12. 接口問題
- 13. C#的新手問題 - 鏈接標籤和函數的問題
- 14. 基本的C#接口問題
- 15. 用C#接口設計問題
- 16. CamShift在OpenCV C++接口上的問題
- 17. C#接口和繼承問題
- 18. C# - 接口/類設計問題
- 19. 問題在接口(多態性)C#
- 20. 與功能範圍C#接口問題
- 21. C#通用接口鑄造問題
- 22. 接口生成器/ Objective C問題
- 23. 在C中使用接口的問題#
- 24. C++重載函數問題
- 25. 構造函數問題(C++)
- 26. C函數簽名問題
- 27. C++函數模板問題
- 28. C#通用函數問題
- 29. C++ CopyFile函數問題
- 30. C++函數轉換問題
此外,您不能有兩個'extern「C」'重載相同的函數名稱。 – zneak 2011-04-24 14:58:51