Встроенная функция, указатель на переменную - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь понять, как работает встроенное ключевое слово с указателями на переменные.

Рассмотрим следующий пример:

struct S
{
 float a;
 float b;
};

inline void foo (struct S *s)
{
   s->a = 5;
}

void main()
{
 struct S ss;
 foo(&ss);
}

Когда компилятор встроит функцию foo, он сгенерирует

void main()
{
 struct S ss;
 (&ss)->a = 5;
}

Или это сгенерирует

void main()
{
 struct S ss;
 ss.a = 5;
}

Другими словами, нужно ли в коде отменить ссылку на указатель на структуру или он поймет, что его нужно заменить только структурой?

Во встроенном приложении это может привести к значительным изменениям во время выполнения.

1 Ответ

0 голосов
/ 31 октября 2018

Компилятор требуется только для генерации кода, который достигает результата, требуемого семантикой языка. То, как конкретный компилятор достигает цели, полностью зависит от реализации. Возможно даже, что код вообще не будет встроен.

Чтобы определить, как ваш конкретный компилятор будет переводить этот код, вы можете либо дать ему команду вывести список сборок сгенерированного кода, либо проверить дизассемблирование кода в отладчике. Сгенерированный код также может сильно отличаться в зависимости от параметров компилятора, таких как уровень оптимизации.

...