Avatar ·

Por que preferir namespaces anônimos a funções estáticas em C++?

Olá a todos! Sou um desenvolvedor C++ iniciante e, ao estudar o tópico "linkage interno" (internal linkage), me deparei com duas maneiras de tornar funções ou variáveis locais a uma única unidade de tradução (translation unit). A primeira maneira é usar a palavra-chave `static` para funções e variáveis globais. Por exemplo: ```cpp // file.cpp static void helperFunction() { // ... alguma implementação } static int internalCounter = 0; ``` A segunda maneira é colocar tudo em um namespace anônimo (unnamed namespace): ```cpp // file.cpp namespace { void helperFunction() { // ... alguma implementação } int internalCounter = 0; } ``` Eu entendo que ambas as abordagens tornam os símbolos visíveis apenas dentro deste arquivo. Mas ouço frequentemente de colegas experientes que usar `static` para funções é uma "prática obsoleta" do C, e que no C++ moderno deve-se usar namespaces anônimos. Vocês podem explicar por que isso é assim?