在每次return前输出行号

peeky01 2011-11-18 10:17:33
昨天面试被问道这么一提:

int fun()
{
...
return x;
...
return x;
...
}

函数里有很多return语句,如何方便的使函数在return前输出行号?
(我说把每个return x;前加一句printf("%d", __LINE__ + 1); 并把两句括起来)
面试的说这方法太复杂,求简单方法。。。曾考虑用宏,不过本人不知如何写这宏
...全文
147 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
peeky01 2011-11-20
  • 打赏
  • 举报
回复
帅哥 这个不行的。。
[Quote=引用 7 楼 keiy 的回复:]
如果函数有返回
#define return(x) printf("line: %d\n",__LINE__); return(x);
EX:

C/C++ code

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int f(void);
void main()
{
int x;
x=……
[/Quote]
peeky01 2011-11-20
  • 打赏
  • 举报
回复
不好意思 搞错了 不可以
[Quote=引用 15 楼 yisikaipu 的回复:]
引用 14 楼 peeky01 的回复:我试过了 这样可以的 即使函数里写成 return 0;

你什么编译器啊?

这样写碰上return 0;根本就不展开这个宏,等于白写
[/Quote]
yisikaipu 2011-11-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 keiy 的回复:]那就这样:
#define return(x) { printf("line: %d\n",__LINE__); return(x); }[/Quote]

这引入了新问题

因为有人就是喜欢写成 return 0;

而这样就强制别人写成 return(0);

所以,这需要改动程序代码,而不止是添加一个宏
yisikaipu 2011-11-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 peeky01 的回复:]我试过了 这样可以的 即使函数里写成 return 0;[/Quote]

你什么编译器啊?

这样写碰上return 0;根本就不展开这个宏,等于白写
peeky01 2011-11-19
  • 打赏
  • 举报
回复
我试过了 这样可以的 即使函数里写成 return 0;

[Quote=引用 13 楼 yisikaipu 的回复:]
引用 10 楼 keiy 的回复:那就这样:
#define return(x) { printf("line: %d\n",__LINE__); return(x); }

这引入了新问题

因为有人就是喜欢写成 return 0;

而这样就强制别人写成 return(0);

所以,这需要改动程序代码,而不止是添加一个宏
[/Quote]
peeky01 2011-11-18
  • 打赏
  • 举报
回复
这样写不行的,大家有木有考虑过这情形:
if(xx)
return a;
else
...
宏代替后变成:
if(xx)
printf(...);
return a;
else...
柯本 2011-11-18
  • 打赏
  • 举报
回复
如果函数有返回
#define return(x) printf("line: %d\n",__LINE__); return(x);
EX:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int f(void);
void main()
{
int x;
x=f();
printf("f() return %d\n",x);
}
#define return(x) printf("line: %d\n",__LINE__); return(x);
int f(void)
{

time_t t;
int c;
srand((unsigned) time(&t));

c=rand()%10;
switch(c) {
case 1:
printf("%d\n",1);
return 1;
case 2:
printf("%d\n",2);
return 2 ;
case 3:
printf("%d\n",3);
return 3;
case 4:
printf("%d\n",4);
return 4;
case 5:
printf("%d\n",5);
return 5;
case 6:
printf("%d\n",6);
return 6;
default:
printf("%d\n",7);
return 7;

}
}
#undef return(x)
//other program
qq120848369 2011-11-18
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define Return printf("line : %d \n",__LINE__); return

int main()
{
Return 0;
}
柯本 2011-11-18
  • 打赏
  • 举报
回复

#define return printf("line: %d\n",__LINE__); return;
就应该可以
参考例子:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void f(void);
void main()
{
f();
}
#define return printf("line: %d\n",__LINE__); return;
void f(void)
{

time_t t;
int c;
srand((unsigned) time(&t));

c=rand()%10;
switch(c) {
case 1:
printf("%d\n",1);
return ;
case 2:
printf("%d\n",2);
return ;
case 3:
printf("%d\n",3);
return ;
case 4:
printf("%d\n",4);
return ;
case 5:
printf("%d\n",5);
return ;
case 6:
printf("%d\n",6);
return ;
default:
printf("%d\n",7);
return;

}
}
追求执着 2011-11-18
  • 打赏
  • 举报
回复
#define return printf("%d",__LINE__);return
healer_kx 2011-11-18
  • 打赏
  • 举报
回复
我觉得楼上的基本就靠谱了。我只知道这么弄。
测试NULL 2011-11-18
  • 打赏
  • 举报
回复

#include <stdio.h>
#define return printf("行号:%d\n", __LINE__);return

int fun(int i)
{
if (i > 1)
{
return 1;
}
else
{
return 2;
}
}

int main()
{
fun(5);
fun(0);

#undef return
return 0;
}
测试NULL 2011-11-18
  • 打赏
  • 举报
回复

#include <stdio.h>
#define return printf("行号:%d\n", __LINE__);return

int fun(int i)
{
if (i > 1)
{
return 1;
}
else
{
return 2;
}
}

int main()
{
int res = fun(5);

return 0;
}
拉卡尼休 2011-11-18
  • 打赏
  • 举报
回复
呵呵,看错题目了
拉卡尼休 2011-11-18
  • 打赏
  • 举报
回复
呵呵,这个可以自定义一个类,在析构函数里打印行号。
在进入函数的地方定义一个该类对象,return是要离开该函数栈,该对象必然析构。


Class CAutoTrace
{
public:
~CAutoTrace()
{
printf("[%s:%d] return...\n", __FUNCTION__, __LINE__);
}
};

void function()
{
CAutoTrace trace;
...
}
柯本 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 peeky01 的回复:]
这样写不行的,大家有木有考虑过这情形:
if(xx)
return a;
else
...
宏代替后变成:
if(xx)
printf(...);
return a;
else...
[/Quote]
那就这样:
#define return(x) { printf("line: %d\n",__LINE__); return(x); }
yisikaipu 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 peeky01 的回复:]这样写不行的,大家有木有考虑过这情形:
if(xx)
return a;
else
...
宏代替后变成:
if(xx)
printf(...);
return a;
else...[/Quote]


楼主你想太多了 :)

64,639

社区成员

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

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