我想用多个名称声明以下函数:
static __inline__ int square(int i) {
return i * i;
}
它只需要使用GCC 4.x(对于某些有用的x值)
我已尝试__asm__
,但它仅适用于非静态功能,因此无法正常工作:
static __inline__ int square2(int i) __asm__("square");
我已尝试过alias
,但它阻止了对square2
的调用的内联,但我希望同等地为square
和square2
内联。
static __inline__ int square2(int i) __attribute__((alias("square2")));
我尝试过一个宏,但这阻止我在其他无关的函数中使用名为square
和square2
的独立局部变量。所以我不能接受这个:
#define square2 square
我知道要写另一个电话,但我不喜欢它,因为它是优化器的另一个间接,并且它可能会阻止在某些复杂情况下的内联:
static __inline__ int square2(int i) { return square(i); }
还有其他解决方案吗?
答案 0 :(得分:3)
我猜你的“真实”代码比单个语句有更复杂的功能?否则,显而易见的选择是用第二个名称重复定义。
你可以把它变成一个宏,当然:
#define SQUARE_BODY(a) return (a) * (a);
static inline square(int x)
{
SQUARE_BODY(x);
}
static inline square2(int x)
{
SQUARE_BODY(x);
}
当然你可以将更多的函数定义折叠到宏中,但我认为只让它成为正文部分会使代码的其余部分更加清晰。