Questo è un esperimento mentale, non un codice di produzione né uno stile di codifica valido.Questo codice C ha un comportamento definito?
Supponiamo di avere questa funzione
int find_process_pid_by_name(char* name, int* threads_in_process);
che restituiscono il PID di un processo chiamato e anche sempre memorizzare nella threads_in_process
il numero di thread in esecuzione in detto procedimento.
Un programmatore pigro, interessati solo sulla PID, scrive questo codice
int pid = find_process_pid_by_name("a process name", &pid);
vuol innescare un comportamento indefinito?
Suppongo che accedendo a 'threads_in_process [i], i = 1,2,3..' nella funzione' find_process_pid_by_name' che sarà un comportamento indefinito! – user007
È ben definito. Come menzionato nelle risposte, c'è un punto di sequenza giusto prima che la funzione ritorni, il che significa che qualsiasi precedente effetto collaterale è avvenuto. –
Strettamente, si passa un 'const char *' a una funzione che accetta un 'char *'; se la funzione modifica ciò che viene passato, si ottiene un comportamento indefinito. –