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++接口的问题
- 7. C++ VB6的接口问题
- 8. C++函数问题
- 9. 接口问题
- 10. C#的新手问题 - 链接标签和函数的问题
- 11. 接口生成器/ Objective C问题
- 12. 在C中使用接口的问题#
- 13. CamShift在OpenCV C++接口上的问题
- 14. 基本的C#接口问题
- 15. 问题在接口(多态性)C#
- 16. C#接口和继承问题
- 17. C# - 接口/类设计问题
- 18. C#构造函数问题
- 19. C函数签名问题
- 20. SetWindowsHookEx函数问题C#
- 21. C++函数模板问题
- 22. C++ CopyFile函数问题
- 23. C++重载函数问题
- 24. C#通用函数问题
- 25. C++函数的问题,
- 26. 构造函数问题(C++)
- 27. C#.NET GetHashCode函数问题
- 28. C++函数调用问题
- 29. C++构造函数问题
- 30. C++函数转换问题
此外,您不能有两个'extern“C”'重载相同的函数名称。 – zneak 2011-04-24 14:58:51