Есть ли какой-либо способ компилятора C / C ++ может ли встроить C-функцию обратного вызова?

Учитывая типичную функцию, которая принимает C-Functionpointer в качестве обратного вызова, например C-Stdlib qsort () , может ли компилятор оптимизировать код, используя встраивание? I думаю, что нет, это правильно?

int cmp(void* pa, void* pb) { /*...*/ }
int func() {
  int vec[1000];
  qsort(vec, 1000, sizeof(int), &cmp);
}

Хорошо, qsort () - это функция из внешней библиотеки, но я не думаю, что даже LTO здесь поможет, правильно?

Но что, если у меня есть my_qsort () , определенный в той же единице компиляции, будет ли тогда встраивание возможно для компилятора?

int cmp(void* pa, void* pb) { /*...*/ }
void my_qsort(int* vec, int n, int sz, (void*)(void*,void*)) { /* ... */ }
int func() {
  int vec[1000];
  my_qsort(vec, 1000, sizeof(int), &cmp);
}

Имеет ли это значение? Я думаю, что использование указателя на C-функцию в качестве обратного вызова является фактором, препятствующим встраиванию компилятора. Правильно?

(Я просто хочу убедиться, что понимаю, почему я должен использовать Функторы в C ++)

9
задан towi 13 March 2011 в 16:25
поделиться