После компиляции строка все еще существует в конечном двоичном файле. Почему
Другие предложили, как избавиться от этого неиспользуемого кода в вашем конечном двоичном файле. Я бы хотел немного ответить на вопрос Why
- вот два момента, почему удаление функции может быть невозможным.
Если вы не объявили все объекты этого типа XXX
со статической связью , компилятор не может удалить тип (и, следовательно, метод) из сгенерированного объектного файла, поскольку какой-то другой объектный файл может получить доступ к значение с помощью extern
. Компоновщик, который может видеть все объектные файлы одновременно, может решить эту проблему.
Однако, поскольку вы пометили свой вопрос как gcc
, возможно, вы не компилируете и / или не связываетесь с -fvisibility = hidden . В этом случае даже компоновщик не может удалить символ (и, следовательно, код), потому что другие модули могут разрешить символ во время выполнения.