内联函数中具有冲突名称的局部变量

问题描述 投票:0回答:1

我正在尝试研究inline的复杂性。为此,我创建了这个小程序。我定义了一个内联函数,该函数具有与全局定义的变量同名的“自动”变量。确保我的功能标记为static(以满足C99标准)之后,我正在研究使用objdump创建的可执行文件。但是首先,这是我的程序

#include <stdio.h>
#include <stdlib.h>

int AAAABBBB = 5; //global scope

#define DOINLINE$

#ifdef DOINLINE
static inline void  __attribute__((always_inline)) myfunc() {
#else
void myfunc() {
#endif
    static int AAAABBBB = 6;
    printf("global is now %d\n", AAAABBBB);
}

int main() {
    printf("global is %d\n", AAAABBBB);
    myfunc();
    printf("global is now %d\n", AAAABBBB);
    return 0;
}

此功能按预期工作,并且在这些看似冲突的名称之间没有任何冲突。但是,查看可执行文件(以及目标文件)的对象转储,我看到编译器确实满足了我的请求,并且myfunc没有单独的部分。这是objdump的粘贴。我确定myfunc内部的局部变量埋在其中,但是似乎无法弄清楚它在哪里。任何人都可以通过一些指向它的指针来提示一下?注意:将函数局部变量声明为非静态似乎根本没有影响。希望能提供一些有见地的答案

我正在尝试研究内联的复杂性。为此,我创建了这个小程序。我定义了一个内联函数,该函数具有与全局定义的同名的“自动”变量...

c scope semantics static-variables
1个回答
2
投票
AAAABBBB中定义的myfunc不会出现在目标文件中,因为编译器已对其进行了优化。我们可以在main的反汇编中看到这一点,这里是内联myfunc的代码:
© www.soinside.com 2019 - 2024. All rights reserved.