Я пытаюсь найти неиспользуемые функции в моей кодовой базе с помощью 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;
}
Помни я хочу предупреждения о неиспользованной функции. Это не вопрос «как мне избавиться от предупреждений».
из документации gcc:
-Wunused-function: предупреждает всякий раз, когда статическая функция объявлена, но не определена, или неиспользуемая статическая функция не используется. Это предупреждение
включен -Wall.
Как видите, вы определили и объявили нестатическую функцию. Также ваша функция не встроена (для чего вам нужно использовать -O3
оптимизация).
Я еще не уверен, что то, о чем вы просите, существует в gcc. 🙂 Но с открытым исходным кодом .. может быть, вы можете реализовать это?
Нестатическая функция никогда не считается «неиспользованной», потому что ее символ экспортируется и доступен для использования другими модулями компиляции, что gcc не может обнаружить. -Wunused-functions
только документировано, чтобы предупредить о статический функции, которые объявлены, но не вызваны.
Вы можете найти неиспользуемые нестатические функции, используя оптимизация линкера.
Я скомпилировал ваш 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()
не используется, и компоновщик может удалить его.