Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

114
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!