Der Compiler muss die Möglichkeit in Betracht ziehen, dass es eine andere Übersetzungseinheit gibt, die nothing()
aufrufen möchte. Daher kann es nicht entfernt werden. Das Beste, was es tun kann, ist, seinen Aufruf zu optimieren, aber die Funktion selbst muss bleiben und ihr Symbol für mögliche externe Verwendung exportiert werden.
Wenn Sie nothing
als static
definieren, geben Sie eine interne Verknüpfung ein Der Compiler kann davon ausgehen, dass nothing
nicht auf den Code zugreift, den er gerade sieht. Dies ermöglicht Optimierungen, wie beispielsweise die Wahl einer anderen performanteren Aufrufkonvention, oder in Ihrem Fall, die Funktion vollständig zu eliminieren.
Tags und Links c llvm clang llvm-ir llvm-clang