Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

120
Vistas
estático delante del número en el programa ac

Así que estaba leyendo un blog sobre la optimización de la clasificación de bloques de un int y la implementación estaba en c. me llego esta linea que no entiendo:

 void nibble_sort_bucket(uint64_t buf[static 1024]) {

El búfer es básicamente datos para ordenar y cada int en él obtiene sus bloques de 4 bits ordenados, por lo que es básicamente para la evaluación comparativa. Cuando busqué el uso de estática en ci encontré dos cosas.

  1. Mantener las definiciones de funciones privadas en un archivo.
  2. Mantener un valor variable entre las llamadas de una función.

Ninguno de estos tiene sentido aquí. ¿Alguien puede explicar por qué alguna vez escribirías estático delante de un número y qué hace eso?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Ese es el tercer significado de la palabra clave static , que se introdujo en C99, pero no es una característica muy conocida. Su propósito es decirle al compilador que está pasando una matriz con al menos 1024 elementos.

De C99 (N1256) §6.7.5.3/p7 Declaradores de funciones (incluidos los prototipos) (énfasis mío):

Si la palabra clave static también aparece dentro de [ y ] de la derivación del tipo de matriz, entonces, para cada llamada a la función, el valor del argumento real correspondiente proporcionará acceso al primer elemento de una matriz con al menos tantos elementos como se especifica por la expresión de tamaño .

Existe cierta discrepancia entre las implementaciones reales. Por ejemplo, clang lanza una advertencia, cuando la matriz pasada no satisface la subcláusula anterior. Por ejemplo:

 #include <stdio.h> void foo(int a[static 10]) {} int main() { int array[8] = {0}; foo(array); }

da:

advertencia: el argumento de la matriz es demasiado pequeño; contiene 8 elementos, el destinatario requiere al menos 10 [-Warray-bounds]

mientras que la implementación de gcc no hace nada (consulte el error 50584 de GCC para obtener más información).

over 4 years ago · Santiago Trujillo Denunciar

0

Esta instrucción buf[static 1024] le dice al compilador que buf tiene al menos 1024 caracteres. Se usa para la optimización, en otras palabras, quiere decir que buf nunca puede ser nulo.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda