__attribute__((always_inline)) не работает должным образом?

static inline int my_function() __attribute__((always_inline));

static inline int my_function()
{
     //...
}

Итак, я объявил свою функцию, как указано выше, хотя в двоичном коде функция разветвлена, а не встроена, поэтому простой NOP может сделать всю функцию бесполезной.

введите здесь описание изображения

Как я могу заставить Xcode 4.6 встроить функцию?


person Leon Storey    schedule 10.02.2013    source источник
comment
Вы не можете заставить Xcode встроить функцию, так как Xcode не компилирует ваш код. Возможно, вы хотите попросить компилятор встроить его, верно?   -  person    schedule 10.02.2013
comment
Да, вы правы, я надеялся, что, указав, какую IDE я использовал, люди, отвечающие, будут знать компилятор и версию, для которой они могут предложить возможные флаги настройки сборки для ввода в Xcode.   -  person Leon Storey    schedule 10.02.2013
comment
Покажите нам определение my_function.   -  person rob mayoff    schedule 10.02.2013
comment
@ user1763532 Круто. Вы уверены, что также отметили определение как always_inline? Видит ли компилятор объявление в тот момент, когда он сталкивается с определением?   -  person    schedule 10.02.2013
comment
Я надеюсь, вы не объявили свою функцию с таким интерфейсом: возвращаемый тип int и никогда ничего не возвращающий, и получающий неопределенное количество аргументов? Но если это так, вы должны сначала исправить это, чтобы помочь компилятору узнать, что нужно поместить в точку вызова, а затем снова посмотреть. Также вы компилируете со всеми включенными оптимизациями?   -  person Jens Gustedt    schedule 10.02.2013


Ответы (1)


Ваша функция, как вы ее здесь даете, не имеет прототипа: вы не указываете тип аргументов. В C просто наличие () в объявлении означает, что функция получает неизвестное количество аргументов. Вероятно, тогда компилятор предполагает, что ему недостаточно известно о функции, чтобы встроить ее. Используйте (void) для объявления функции без аргументов.

person Jens Gustedt    schedule 10.02.2013
comment
Извините, я упростил код, чтобы подчеркнуть, как я объявил его встроенным. Конечно, он возвращает целое число, иначе он был бы объявлен как возвращаемый тип void. Проблема заключалась в том, что my_function() вызывает рекурсивную функцию, которую компилятор все равно не смог бы встроить. Однако спасибо, теперь я буду использовать (void) для аргументов. - person Leon Storey; 10.02.2013