Dies ist ein Gedankenexperiment, nicht Produktionscode oder guter Codierungsstil.Hat dieser C-Code ein definiertes Verhalten?
Angenommen, wir haben diese Funktion
int find_process_pid_by_name(char* name, int* threads_in_process);
, die die PID eines benannten Prozess und auch immer speichern in threads_in_process
die Anzahl der Threads ausgeführt wird in dem Prozess zurückzukehren.
Ein fauler Programmierer, interessiert nur auf dem PID, schreibt diesen Code
int pid = find_process_pid_by_name("a process name", &pid);
es nicht definiertes Verhalten auslösen Hat?
Ich denke, wenn Sie auf 'threads_in_process [i], i = 1,2,3..' in Ihrer Funktion' find_process_pid_by_name' zugreifen, wird dies undefiniertes Verhalten sein! – user007
Es ist gut definiert. Wie in den Antworten erwähnt, gibt es einen Sequenzpunkt direkt vor der Rückkehr der Funktion, was bedeutet, dass irgendwelche früheren Nebenwirkungen stattgefunden haben. –
Genaugenommen übergeben Sie ein 'const char *' an eine Funktion, die ein 'char *' braucht; Wenn die Funktion ändert, was passiert ist, erhalten Sie undefiniertes Verhalten. –