Avatar ·

Por qué se deben preferir los espacios de nombres anónimos a las funciones static en C++?

¡Hola a todos! Soy un desarrollador principiante de C++, y al estudiar el tema de "enlace interno" (internal linkage), me encontré con dos formas de hacer que funciones o variables sean locales a una unidad de traducción (translation unit). La primera forma es usar la palabra clave `static` para funciones y variables globales. Por ejemplo: ```cpp // file.cpp static void helperFunction() { // ... some implementation } static int internalCounter = 0; ``` La segunda forma es poner todo en un espacio de nombres anónimo (unnamed namespace): ```cpp // file.cpp namespace { void helperFunction() { // ... some implementation } int internalCounter = 0; } ``` Entiendo que ambos enfoques hacen que los símbolos sean visibles solo dentro de este archivo. Pero a menudo escucho de colegas experimentados que usar `static` para funciones es una "práctica obsoleta" de C, y que en C++ moderno se deben usar espacios de nombres anónimos. ¿Pueden explicar por qué esto es así?