c++中 如何宏定义一个函数(c++面试题)

wenliluo1027 2010-06-13 11:17:47
c++中 如何宏定义一个函数(c++面试题)
...全文
1690 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
深圳大哥 2012-03-26
  • 打赏
  • 举报
回复
面试前看看《程序员面试宝典》
dongfei00 2012-03-26
  • 打赏
  • 举报
回复
#define 宏明 宏表达式
Kaile 2012-03-26
  • 打赏
  • 举报
回复
复杂的函数不要用宏,无法单步调试
patrick_880520 2012-03-26
  • 打赏
  • 举报
回复
inline能代替宏?
inline只能简单的函数吧
路过少年 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wangchentangjuan 的回复:]

C++ 请用inline
[/Quote]

一直不明白inline跟把函数直接写出来有什么不一样呢?
路过少年 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zhh_steven 的回复:]

#include "stdafx.h"

#define APP_INIT app_init(); \
key_init()

int app_init()
{
printf("app_init() \n");
return 0;
}
int key_init()
{
printf("key_init() \n");
return 0……
[/Quote]

这个宏定义是定义了两个函数吗?不解,求指教~
天外来客-007 2011-01-08
  • 打赏
  • 举报
回复
本题考查你对宏定义展开的掌握程度,好好看看书吧,基础好,就不会怕任何问题!
DQ_Quest 2011-01-08
  • 打赏
  • 举报
回复
c++绝对是推荐用内联的,用宏会出现一堆奇怪的问题
Orange_ou 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 frankhb1989 的回复:]
引用 10 楼 cpp_yangzuoshi 的回复:

来个指针的例子,比如说释放内存.
#define RELEASE_NEW_BUF(x) if(x){delete x;x=NULL;}
注意RELEASE_NEW_BUF后面不要有空格!

if判断是多此一举...
delete NULL不会崩掉...
[/Quote]
这不是崩溃不崩溃的问题吧
既然是空指针,还deleted干嘛 干嘛还要执行这一步
再说你能保证编译器对这个有处理了?
还有的是这应该算一种良好习惯吧
FrankHB1989 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cpp_yangzuoshi 的回复:]

来个指针的例子,比如说释放内存.
#define RELEASE_NEW_BUF(x) if(x){delete x;x=NULL;}
注意RELEASE_NEW_BUF后面不要有空格!
[/Quote]
if判断是多此一举...
delete NULL不会崩掉...
nicklisir 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 gansininiang 的回复:]
你们这都是些简单的函数 复杂点的函数怎么办?
[/Quote]
复杂可以用"\"分多行写
苍蝇①号 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 cyblueboy83 的回复:]

说实话,出这道题的人有够无聊的
[/Quote]
harleypang 2011-01-06
  • 打赏
  • 举报
回复
c++的习惯是用inline了,好处是可以检查返回值的数据类型。更加规范
lwjxp 2011-01-06
  • 打赏
  • 举报
回复
我想还是有用的.例如给客户做OEM的时候,客户要把生成的DLL函数名都给改了.那就是一条语句的事了.
booklyn 2011-01-06
  • 打赏
  • 举报
回复
复杂点的函数你可以这么写:
#define GCHMAC_STRUCT_REALIZE(STBase) \
void Init() \
{ \
ZeroMemory(this,sizeof(STBase)) \
}

这个就是比较正规的以宏来表示函数的方法,其实当你调用宏的时候,无非就是把GCHMAC_STRUCT_REALIZE该宏完全展开进行操作,也没什么必要这么去写,一般这么写都是调用时方便。
sd501 2011-01-06
  • 打赏
  • 举报
回复
面试的什么公司啊?
herman~~ 2010-06-15
  • 打赏
  • 举报
回复
说实话,出这道题的人有够无聊的
wupeak 2010-06-15
  • 打赏
  • 举报
回复
inline绝对可以替代宏定义
Eleven 2010-06-14
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

#define PRT(a) cout<<a<<endl

int main(int argc, char* argv[])
{
PRT("Hello");
return 0;
}
sunzucao 2010-06-14
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 chinazhangjie 的回复:]
引用 23 楼 sunzucao 的回复:
别人是面试题,又不是实际开发.
#define max(a,b) (a)>(b)?(a):(b)

面试的目的是什么?
[/Quote]
难道你在MFC中没用过ASSERT,RGB这样的宏函数吗?如果它们一无事处那微软为什么还要定义它们
加载更多回复(24)

64,654

社区成员

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

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