Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

149
Visualizações
¿Este código C tiene un comportamiento definido?

Este es un experimento mental, no un código de producción ni un buen estilo de codificación.

Supongamos que tenemos esta función

 int find_process_pid_by_name(char* name, int* threads_in_process);

que devuelven el PID de un proceso con nombre y también siempre almacenan en threads_in_process la cantidad de hilos que se ejecutan en dicho proceso.

Un programador perezoso, interesado solo en el PID , escribe este código

 int pid = find_process_pid_by_name("a process name", &pid);

¿Desencadena un comportamiento indefinido?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

No, no creo que sea un comportamiento indefinido. Hay un punto de secuencia inmediatamente antes de que se llame a la función (después de que se hayan evaluado los argumentos y la expresión que denota la función llamada), y hay otro antes de que regrese la función llamada. Cualquier efecto secundario en pid realizado por la función llamada se ha completado antes de que la función termine de regresar. Luego, el resultado de la función se asigna a pid . No hay duda de que la función cambie la ubicación asignada. No veo nada que invoque un comportamiento indefinido.

Supongo que la función llamada trata el argumento int * como un puntero de solo escritura a un solo valor. Si se lee desde un solo valor, necesitamos saber que pid se inicializó previamente (formalmente; en la práctica, no importará). En el contexto, pid no se ha inicializado; el resultado de la función la inicializará. Entonces, si la función lee desde su argumento de puntero, técnicamente, tiene un comportamiento indefinido. Si la función trata el puntero como el inicio de una matriz de elementos múltiples y accede más allá del elemento cero, hay problemas. Pero estos son problemas algo fuera del alcance previsto de la pregunta/discusión.

over 4 years ago · Santiago Trujillo Relatório

0

Sí, creo que este código está bien definido. Hay un punto de secuencia al final de la función, antes de que el valor devuelto se copie en el contexto de llamada. Entonces, la función primero asignará a pid indirectamente a través de threads_in_process , luego regresará y luego el valor de retorno se asignará a pid .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda