GCC -Wunused-функция не работает (но другие предупреждения работают)

Я пытаюсь найти неиспользуемые функции в моей кодовой базе с помощью GCC -Wunused-function флаг.

Как и следовало ожидать, компиляция приведенного ниже кода с gcc -Wall -Wunused-function main.cpp печатает unused variable предупреждение:

warning: unused variable ‘x’ [-Wunused-variable]

Тем не менее, компилятор не дает unused-function предупреждение.
Что мне нужно сделать, чтобы GCC заметил неиспользованную функцию foo()?

// main.cpp

void foo(){ } //should (but doesn't) trigger 'unused function' warning

int main (int argc, char **argv){
int x; //correctly triggers 'unused variable' warning
return 0;
}

Помни я хочу предупреждения о неиспользованной функции. Это не вопрос «как мне избавиться от предупреждений».

5

Решение

из документации gcc:

-Wunused-function: предупреждает всякий раз, когда статическая функция объявлена, но не определена, или неиспользуемая статическая функция не используется. Это предупреждение
включен -Wall.

Как видите, вы определили и объявили нестатическую функцию. Также ваша функция не встроена (для чего вам нужно использовать -O3 оптимизация).

Я еще не уверен, что то, о чем вы просите, существует в gcc. 🙂 Но с открытым исходным кодом .. может быть, вы можете реализовать это?

3

Другие решения

Нестатическая функция никогда не считается «неиспользованной», потому что ее символ экспортируется и доступен для использования другими модулями компиляции, что gcc не может обнаружить. -Wunused-functions только документировано, чтобы предупредить о статический функции, которые объявлены, но не вызваны.

13

Вы можете найти неиспользуемые нестатические функции, используя оптимизация линкера.

Я скомпилировал ваш main.cpp с

gcc -ffunction-sections -fdata-sections -Wl,--gc-sections -Wl,--print-gc-sections main.cpp

И выход

/usr/bin/ld: Removing unused section '.text._Z3foov' in file '/tmp/cc9IJvbH.o'

Показывает, что foo() не используется, и компоновщик может удалить его.

4
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector