请问:这几句c++代码怎么理解?

造句大全 2008-07-28 03:49:49
1、typedef int (*RUN_ATOM)(ST_JYXX *prt_jyxx, long prl_yzjym);
2、extern "C" {
int fun(char *, char *);
int fun1(char *, char *, char *);
int fun2(char *, char *, char *);
int fun3(char *mw, char *mm);
};

3、char *IntToStr(long prl_value);

谢谢!!
...全文
211 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ronliu 2008-07-29
  • 打赏
  • 举报
回复
2 编译器在编译函数时的手段不同。对于C语言,编译器只记下函数名即可,而对于C++语言,编译器需要记下整个函数原型,即函数名、返回值、参数。在某些时候,需要从C中调用C++的函数,函数名称编译方式的不同,导致无法识别C++中的函数。所以在函数名称前面加上extern "C"。之后编译器会按照C的方式来编译这个函数,当然在这个函数里面,也只能用C的东西。至于在每个函数前面加上extern "C",还是在像那样用大括号把函数括起来添加,效果是一样的。

1. 函数指针,typedef表示将RUN_ATOM声明为一种类型。这样RUN_ATOM就可以去定义别的变量了。
大写的池 2008-07-28
  • 打赏
  • 举报
回复
16楼比较详细的正解。
ponymayan 2008-07-28
  • 打赏
  • 举报
回复
说得好
expter 2008-07-28
  • 打赏
  • 举报
回复
丿
foliage_ 2008-07-28
  • 打赏
  • 举报
回复
1、typedef int (*RUN_ATOM)(ST_JYXX *prt_jyxx, long prl_yzjym);

(先不要看typedef ) 其实RUN_ATOM 就是个函数指针类型 , 所指向的函数的类型是以 ST_JYXX *prt_jyxx, long prl_yzjym 为参数,并返回 int 的函数

typedef 的作用就是将 RUN_ATOM 作为类型int (*)(ST_JYXX *prt_jyxx, long prl_yzjym) 的别名,
可以这样定义一个函数指针:
RUN_ATOM ptr ;
这样ptr就可以用一个函数 的地址作为参数 ,但是这样的函数必须是 以 ST_JYXX *prt_jyxx, long prl_yzjym 为参数,并返回 int 的函数。


2. extern "C"{}的作用就是说明这在{}范围之内说明的函数是按c,或者需要按c标准来编译。

3. char *IntToStr(long prl_value); 定义了一个函数 函数参数是以一个long型作为参数的,返回的是char*
数据类型
注意区别 char *IntToStr(long prl_value); 和 char (*IntToStr)(long prl_value); 后面这个就有点类似第一个问题了。。
sunhuanwen 2008-07-28
  • 打赏
  • 举报
回复
楼上正解!
wuroy27496 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jackzhhuang 的回复:]
引用 12 楼 fansyong 的回复:
不太明白1中干吗要用关键字typedef!哪位解释一下!


1,意思已经有人说出来了,至于为什么需要typedef,那是因为可读性,实际上你也可以这样声明一个函数指针:
void (*p)();
这个时候p就是一个指向没有参数的且返回值为void的函数的函数指针,但这样可读性大大降低。

2、extern "C" {
};
这个意思是按C语言的规则编译。C编译不改变变量、函数名,C++编译改变。若你要导出变量或者…
[/Quote]
jackzhhuang 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 fansyong 的回复:]
不太明白1中干吗要用关键字typedef!哪位解释一下!
[/Quote]

1,意思已经有人说出来了,至于为什么需要typedef,那是因为可读性,实际上你也可以这样声明一个函数指针:
void (*p)();
这个时候p就是一个指向没有参数的且返回值为void的函数的函数指针,但这样可读性大大降低。

2、extern "C" {
};
这个意思是按C语言的规则编译。C编译不改变变量、函数名,C++编译改变。若你要导出变量或者函数,就用这方法。当然说白了,花括号之间只能写C语言的东西,声明类、模板等等C++的东西都不行。

3,这个是声明函数,函数传一个长整型参数,返回char*。
fansyong 2008-07-28
  • 打赏
  • 举报
回复
不太明白1中干吗要用关键字typedef!哪位解释一下!
Gob00st 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 foxinhongyan 的回复:]
2是在C++中声明c函数
[/Quote]
extern "C"告诉编译器,被这个修饰的函数需要按c标准来编译。

比如在c++项目中使用c的库函数,为了避免编译错误,就对需要使用的c函数使用extern "C"。
注意extern 只能用在全局函数上。
Learn-anything 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 leoskys 的回复:]
extern "C"{}的作用就是说明这在{}范围之内说明的函数是按c,或者需要按c标准来编译。
[/Quote]
leoskys 2008-07-28
  • 打赏
  • 举报
回复
extern "C"{}的作用就是说明这在{}范围之内说明的函数是按c,或者需要按c标准来编译。
造句大全 2008-07-28
  • 打赏
  • 举报
回复
对于2,我听的很迷糊,但我会想办法理解你们给我的解释,谢谢
foxinhongyan 2008-07-28
  • 打赏
  • 举报
回复
2是在C++中声明c函数
lzr4304061988012 2008-07-28
  • 打赏
  • 举报
回复
将RUN_ATOM定义为返回值为INT,而参数是ST_JYXX *prt_jyxx, long prl_yzjym的函数的指针类型;
lzr4304061988012 2008-07-28
  • 打赏
  • 举报
回复
飞雪好快啊!我想补充下:1.将RUN_ATOM定义为返回值为INT,而参数是ST_JYXX *prt_jyxx, long prl_yzjym的函数的指针;
2.EXTERN "C",链接指示,声明c++中c的函数;
3.看函数名视乎是将INT转化为STRING的函数(猜的)。
造句大全 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 baihacker 的回复:]
1.定义了一个函数指针类型
2.声明了四个函数,函数是调用方式是按C的约定
3.声明一个函数.
[/Quote]

你好,能说的直白点可以吗?
多解释一点,谢谢。
zjw6861982 2008-07-28
  • 打赏
  • 举报
回复
飞雪!不要抢这么快!!!
xkyx_cn 2008-07-28
  • 打赏
  • 举报
回复
2应该是函数按C的方式进行链接
baihacker 2008-07-28
  • 打赏
  • 举报
回复
1.定义了一个函数指针类型
2.声明了四个函数,函数是调用方式是按C的约定
3.声明一个函数.

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧