如何定义具有多个名称的函数

时间:2014-10-19 15:07:03

标签: c gcc alias

我想用多个名称声明以下函数:

static __inline__ int square(int i) {
  return i * i;
}

它只需要使用GCC 4.x(对于某些有用的x值)

我已尝试__asm__,但它仅适用于非静态功能,因此无法正常工作:

static __inline__ int square2(int i) __asm__("square");

我已尝试过alias,但它阻止了对square2的调用的内联,但我希望同等地为squaresquare2内联。

static __inline__ int square2(int i) __attribute__((alias("square2")));

我尝试过一个宏,但这阻止我在其他无关的函数中使用名为squaresquare2的独立局部变量。所以我不能接受这个:

#define square2 square

我知道要写另一个电话,但我不喜欢它,因为它是优化器的另一个间接,并且它可能会阻止在某些复杂情况下的内联:

static __inline__ int square2(int i) { return square(i); }

还有其他解决方案吗?

1 个答案:

答案 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);
}

当然你可以将更多的函数定义折叠到宏中,但我认为只让它成为正文部分会使代码的其余部分更加清晰。