Почему следующая функция не становится встроенной? - PullRequest
0 голосов
/ 17 октября 2019

Подскажите, пожалуйста, почему следующая функция func1 не встроена?

Код

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

static inline int func1(int a) {
    return a*2;
}

int main(int argc, char **argv) {

    int value = strtol(argv[1], NULL, 0);

    value = func1(value);

    printf("value: %d\n", value);

    return 0;
}

Пробег

$ gcc -Wall -o main main.c
$ objdump -D main | grep func1
0000000000000700 <func1>:
 742:   e8 b9 ff ff ff          callq  700 <func1>

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Я полагаю, что это не встроено, потому что никто не выполняет оптимизацию (для отладки, я полагаю). Из онлайн-документов GCC ,

GCC не поддерживает никакихработает, когда не оптимизируется, если вы не укажете атрибут 'Always_inline' для функции

2 голосов
/ 17 октября 2019

inline буквально является «предложением».

За 6.7.4 Спецификаторы функций , параграф 6 стандарта C :

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

Поскольку inline является просто предложением, функция со спецификатором inline может быть встроенной или не встроенной в зависимости от реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...