#define INLINE static inline __attribute__((always_inline))
INLINE void swap(int a, int b){
int tmp = a;
a = b;
b = tmp;
}
int main(){
int x = 10;
int y = 20;
swap(x, y);
printf("x:%d y:%d", x, y);
return 0;
}
output: x:10 y:20
如果内联函数被插入到它们被调用的函数中,为什么这个函数不能给予正确的结果?
2条答案
按热度按时间zqry0prt1#
你必须像写一个普通的函数一样写它。即:
然后把它留给编译器。它将使用指针优化间接寻址,作为内联的一部分。
你写的函数没有副作用,所以编译器会把它当作一个大的空操作,并完全删除它。
sycxhyv72#
如果内联函数被插入到它们被调用的函数中,为什么这个函数不能给予正确的结果?
内联函数不会改变语义(源代码的含义和程序行为的规则)。内联函数的参数仍然是单独的变量,初始化为参数值的副本。内联不会使它们成为调用函数的一部分。