C语言 使用内联函数进行交换操作

vbopmzt1  于 2023-05-16  发布在  其他
关注(0)|答案(2)|浏览(111)
#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

如果内联函数被插入到它们被调用的函数中,为什么这个函数不能给予正确的结果?

zqry0prt

zqry0prt1#

你必须像写一个普通的函数一样写它。即:

static inline void swap(int* a, int* b){
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

然后把它留给编译器。它将使用指针优化间接寻址,作为内联的一部分。
你写的函数没有副作用,所以编译器会把它当作一个大的空操作,并完全删除它。

sycxhyv7

sycxhyv72#

如果内联函数被插入到它们被调用的函数中,为什么这个函数不能给予正确的结果?
内联函数不会改变语义(源代码的含义和程序行为的规则)。内联函数的参数仍然是单独的变量,初始化为参数值的副本。内联不会使它们成为调用函数的一部分。

相关问题