Я пытаюсь изучить тонкости inline
. Для этого я создал эту маленькую программу. Я определил встроенную функцию, которая имеет переменную automati c с тем же именем, что и глобально определенная переменная. Убедившись, что моя функция помечена 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, кажется, не имеет никакого отношения.