鱼C论坛

 找回密码
 立即注册
查看: 7453|回复: 6

C++里面如何声明const void f(void)函数为C程序中的库函数?

[复制链接]
发表于 2012-9-20 08:49:24 | 显示全部楼层 |阅读模式
1鱼币
面试原题,不要问我有没有写错,人家的确是这样出的,一个字都不会错。读完这题,我也懵了,搞不明白什么意思啊??求大神解答???

最佳答案

查看完整内容

C和C++的函数机制不一样,C++有函数重载机制,就是函数名一样,参数不一样也认为是不同的函数。以函数 void f(int a, int b);为例。C语言编译器仅仅以函数名标识该函数如标识为 __f C++编译器以函数名+参数标识该函数,如标识为:_f_int_int 所以C++使用C编译器编译出来的库里的函数的时候,必须明白这里的函数仅仅以函数名标识,不将参数信息加入标识。所以才要在声明这类函数的时候用exterc "C" LZ误解这个面试题的意思 ...
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-20 08:49:25 | 显示全部楼层

C和C++的函数机制不一样,C++有函数重载机制,就是函数名一样,参数不一样也认为是不同的函数。以函数
void f(int a, int b);为例。C语言编译器仅仅以函数名标识该函数如标识为 __f
C++编译器以函数名+参数标识该函数,如标识为:_f_int_int
所以C++使用C编译器编译出来的库里的函数的时候,必须明白这里的函数仅仅以函数名标识,不将参数信息加入标识。所以才要在声明这类函数的时候用exterc "C"

LZ误解这个面试题的意思了。它仅仅是说C++中要使用一个已知的C库的的函数要如何声明。至于这样声明后,你又将这个函数实现为C++里的普通函数,那就是你个人的问题了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-20 09:12:29 | 显示全部楼层
我去,这是个什么东东啊?常量函数?按照度娘的意思应该是这样的,void f(void) const
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-20 09:26:18 | 显示全部楼层
我在群里问,有人给发了这么个链接!http://blog.163.com/sean_1010/blog/static/11080322200952633111975/,你去看看吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-20 09:33:37 | 显示全部楼层
最简单就是这样:
  1. extern "C" const void f(void);
复制代码
如果复杂一点,想利用预处理自动识别要不要加extern "C"
就这样写:
  1. #ifdef __cplusplus
  2. extern "C" {
  3. #endif
  4. const void f(void);
  5. #ifdef __cplusplus
  6. }
  7. #endif
复制代码
C++编译器都预定义了__cplusplus,C编译器就没有预定义这个。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-20 12:26:43 | 显示全部楼层
仰望天上的光 发表于 2012-9-20 09:33
最简单就是这样:如果复杂一点,想利用预处理自动识别要不要加extern "C"
就这样写:C++编译器都预定义了_ ...

这个我知道,但是这样 也不能说 这个函数就是C里面的库函数吧,也可能是自定义的普通函数呢??
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-20 15:01:28 | 显示全部楼层
仰望天上的光 发表于 2012-9-20 13:01
C和C++的函数机制不一样,C++有函数重载机制,就是函数名一样,参数不一样也认为是不同的函数。以函数
v ...

如果理解成:C++里面如何调用C库里面的函数,那你这样就很正确了,我感觉还是它题出的歧义太大,不管咋样,谢谢喽!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-15 05:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表