Мне нужно написать программу, которая выяснит ограничения использования встроенных функций.
Я нашел следующую информацию для компилятора GCC (http://gcc.gnu.org/onlinedocs/gcc/Inline.html#Inline):
Обратите внимание, что некоторыеИспользование в определении функции может сделать ее непригодной для встроенной замены. Среди них: переменные функции, использование alloca, использование вычисленного goto (см. Метки как значения), использование нелокального goto, использование вложенных функций, использование setjmp,использование __builtin_longjmp и использование __builtin_return или __builtin_apply_args. Использование -Winline предупреждает о невозможности замены встроенной функции и указывает причину сбоя.
Затем я написал следующую программу с переменной функцией:
#include <cstdarg>
#include <iostream>
using namespace std;
inline double average(int count, ...) {
va_list ap;
int j;
double sum = 0;
va_start(ap, count);
for (j = 0; j < count; j++) {
/* Increments ap to the next argument. */
sum += va_arg(ap, int);
}
va_end(ap);
return sum / count;
}
int main(void) {
cout << average(4,6,8,2,3);
return 0;
}
А потом скомпилировал мою программу так: g++ -Wall -Winline program.cpp
. После компиляции не было предупреждения от -Winline
.
Что я сделал не так? Спасибо за ваши ответы!