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í?