用宏定义还是函数?
一个类有30个成员函数,每个成员函数开头都是这段代码:
if(count == 0)
{
int ret = init();
if(ret == fail)
{
return 1;
}
}
if(count == 1)
{
int ret = create();
if(ret == fail)
{
return 1;
}
}
为了简化代码,有两个方法
1、用宏,将上面的代码封起来。
2、写一个函数
int check()
{
if(count == 0)
{
int ret = init();
if(ret == fail)
{
return 1;
}
}
if(count == 1)
{
int ret = create();
if(ret == fail)
{
return 1;
}
}
return 0;
}
用宏可以简化,但是感觉很别扭,因为宏里有两个函数。一般宏只是定义个常值或者固定的运算,一般不带函数较好吧。
用函数的话,感觉效率会低一些
大家说说该怎么办比较好? C++ 宏
[解决办法]
inline function 效率没有问题的。
[解决办法]
inline int f(int count) {
int ret = 0;
if (count == 0) {
ret = init();
} else if (count == 1) {
ret = create();
}
return ret == fail ? 1 : 0;
}
看看楼主写这个代码和他的设计,到了去考虑一个函数调用的代价的阶段了嘛,这简直南辕北辙,丢西瓜找芝麻。
调用的一个函数的代价都计较,你也太抠了。
在某些情况下,必须计较啊
代码规范问题你就别看了,我随便写的。设计也是没问题的,因为这个类是对外接口,有些东西必须由接口本身自己保证,所以那些重复代码是必须的。同时,接口调用是非常频繁的,对处理速度要求较高。
就老老实实写一个函数,代替如下:inline int f(int count) {
int ret = 0;
if (count == 0) {
ret = init();
} else if (count == 1) {
ret = create();
}
return ret == fail ? 1 : 0;
}
inline起不起作用编译器说了算
这个函数很短,而且已if判断来决定是否调用函数,编译器应该不会拒绝吧,总之inline也算一个较好的办法
if (count<0
[解决办法]
1<count) return 0;
int *F[2](void)={init,creat};
if (fail == F[count]()) return 1;
//...
就老老实实写一个函数,代替如下:inline int f(int count) {
int ret = 0;
if (count == 0) {
ret = init();
} else if (count == 1) {
ret = create();
}
return ret == fail ? 1 : 0;
}
inline起不起作用编译器说了算
这代码改变楼主的本意了吧?0和1并不是if。。。else。。。的关系。可能init()处理完了之后count就变成1了。按照楼主以前的代码连着执行了init和create,但是这个代码就达不到楼主的要求了。
按照楼主提供的代码是完全可以的,这里一点都没有歪曲楼主的意思。
可能是这2种情况,1、楼主是随便写写的,所以没有加两个if之间的中间代码。2、楼主没有写成if-else形式。
我觉得是你的需求分析错了。如果init和create只执行一个就可以继续下面的代码了,那么有必要设计2个函数吗?
就老老实实写一个函数,代替如下:inline int f(int count) {
int ret = 0;
if (count == 0) {
ret = init();
} else if (count == 1) {
ret = create();
}
return ret == fail ? 1 : 0;
}
inline起不起作用编译器说了算
这代码改变楼主的本意了吧?0和1并不是if。。。else。。。的关系。可能init()处理完了之后count就变成1了。按照楼主以前的代码连着执行了init和create,但是这个代码就达不到楼主的要求了。
按照楼主提供的代码是完全可以的,这里一点都没有歪曲楼主的意思。
可能是这2种情况,1、楼主是随便写写的,所以没有加两个if之间的中间代码。2、楼主没有写成if-else形式。
我觉得是你的需求分析错了。如果init和create只执行一个就可以继续下面的代码了,那么有必要设计2个函数吗?
实际情况是:对于一种情况,执行init;对于另一种情况,执行create;对于第三种情况,执行后面的代码。
init和create可能执行其中一个,也可能都不执行,但是不会同时执行。设计两个函数完全是因为实际需求来的~