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

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

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 Report

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 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!