Namespaces
Variants

File scope

From cppreference.net

Si el declarador o especificador de tipo que declara el identificador aparece fuera de cualquier bloque o lista de parámetros, el identificador tiene ámbito de archivo, que termina al final de la unidad de traducción.

Por lo tanto, la ubicación de la declaración de un identificador (en un declarador o especificador de tipo) fuera de cualquier bloque o lista de parámetros significa que el identificador tiene ámbito de archivo. El ámbito de archivo de un identificador se extiende desde la declaración hasta el final de la unidad de traducción en la que aparece la declaración.

Ejemplo

Los identificadores a, b, f y g tienen ámbito de archivo.

#include <stdio.h>
int a = 1;
static int b = 2;
void f (void) {printf("from function f()\n");}
static void g (void) {printf("from function g()\n");}
int main(void)
{
    f();
    g();
    return 0;
}
/* end of this translation unit, end of file scope */

Salida posible:

from function f()
from function g()