valores mayor igual funciones funcion entre entonces contara contar condicional buscar c

mayor - funcion si en excel



Tirantes rizados como argumento de funciĆ³n. (4)

Con lo que estás tratando es con un inicializador de matriz, que resulta ser la matriz vacía. Por lo general, lo encontrarás como:

int my_array[] = (int[]){10, 20, 30};

E inicializaría my_array para contener tres elementos. Aquí no hay elementos, de ahí la sintaxis torpe.

He notado en algún código fuente la línea:

if(pthread_create((pthread_t[]){}, 0, start_thread, pthread_args)) { ...

Funciona correctamente, pero ¿cómo entender el primer argumento? Parece que las llaves se convierten al tipo pthread_t[] .

P: Busqué en Google, pero no encontré la respuesta, solo algunas conjeturas (¿alguna forma de inicialización o característica heredada de c?)


Es un literal compuesto como lo menciona @ some-programmer-dude.

En este caso específico, se utiliza para crear una matriz para almacenar el thread_id y descargarlo más tarde sin la necesidad de crear una variable adicional. Esto es necesario porque pthread_create no acepta NULL como argumento para thread_id .


Estás creando una matriz con pthread[] . Puede pasar valores en las llaves si define una longitud para el argumento.


Este es un literal compuesto , con una violación de restricción ya que los paréntesis del inicializador no pueden estar vacíos :

(pthread_t[]){}

Usando gcc -std=c99 -Wall -Wextra -Wpedantic esto produce la advertencia:

compound_literal_pthread.c:6:36: warning: ISO C forbids empty initializer braces [-Wpedantic] pthread_t *ptr = (pthread_t []){};

El resultado parece ser un puntero a pthread_t , aunque no veo este comportamiento documentado en el manual de gcc. Tenga en cuenta que se permiten llaves vacías como inicializadores en C ++, donde son equivalentes a { 0 } . Este comportamiento parece ser compatible con C, pero no documentado, por gcc. Sospecho que es lo que está sucediendo aquí, haciendo que la expresión anterior sea equivalente a:

(pthread_t[]){ 0 }

En mi sistema, pthread_t es un typedef para unsigned long , por lo que esta expresión creará una matriz de pthread_t contiene solo un elemento 0 . Esta matriz se descompondría en un puntero a pthread_t en la llamada de función.