这段宏能不能用内联函数做?
定义一个宏如下:
#define ISNULLPOINTTHENRETURN(X) if ( X == NULL ) { return FALSE; }
在一个BOOL test(void *)函数中用了这个宏:
BOOL test(void * pointer)
{
ISNULLPOINTTHENRETURN(pointer);
XXXX;
}
如果pointer为空,XXXX就不会执行,而是直接返回FALSE.这个宏能不能改成内联函数来实现呢?
[解决办法]
inline BOOL ISNULLPOINTTHENRETURN(void *x)
{
return (x != NULL);
}
[解决办法]
... 很明显,是不能做内联函数的。。 它本身的意思不是一个独立的函数,而是直接控制了所在函数的流程。。
[解决办法]
对,这个是不能内联的。
[解决办法]
不能用内联函数代替。同时原来这个宏对提高代码的可维护性没有任何好处。
[解决办法]
不能了,要也是很诡异的函数级跳转@_@
[解决办法]
不用实现成inline。
这个宏也是很差的编程风格,也不应该用。
[解决办法]
不能 这个宏里的return 是宏位置所在的函数的返回 并不是得出一个结果
[解决办法]
一楼的方式不可以吗??
[解决办法]
inline ISNULLPOINTTHENRETURN(void *x)
{
if ( x == NULL )
{
exit(FALSE);
}
}
这个可以吧,直接出去了.
[解决办法]
inline bool is_null_point_then_return(void *x)
{
if( x== 0 )
throw runtime_error( "null pointer " );
return true
}
在外边用try{}catch{}.
楼主的做法比较变态,对程序毫无用处,我这边也是以无聊来做。
哈哈,笑谈。
[解决办法]
一个函数inline展开后,return就不见了。因为对于inline函数,return是从该函数返回。一旦inline展开,函数本体就不存在了,也就无需那个return从这个函数返回了。
inline int f(int a) {
return a+1;
}
int x=10;
int y=f(x);
inline展开后,最后的那个调用可能会变成这副样子(伪码,具体的情况取决于编译器):
int y=x+1;