gpt4 book ai didi

c - 这个 C 代码有定义的行为吗?

转载 作者:太空狗 更新时间:2023-10-29 16:44:31 25 4
gpt4 key购买 nike

这是一个思想实验,不是生产代码,也不是好的编码风格。

假设我们有这个函数

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

返回指定进程的 PID 并且始终将在所述进程中运行的线程数存储到 threads_in_process 中。

一个懒惰的程序员,只对 PID 感兴趣,写了这段代码

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

它会触发未定义的行为吗?

最佳答案

不——我不认为这是未定义的行为。在调用函数之前有一个序列点(在计算了表示被调用函数的参数和表达式之后),在被调用函数返回之前还有另一个序列点。在函数完成返回之前,被调用函数对 pid 执行的任何副作用都已完成。然后将函数的结果分配给 pid。毫无疑问,分配给函数更改的位置。我没有看到任何调用未定义行为的东西。

我假设被调用函数将 int * 参数视为指向单个值的只写指针。如果它从单个值读取,我们需要知道 pid 之前已初始化(正式地;在实践中,这无关紧要)。在上下文中,pid 还没有被初始化;该函数的结果将对其进行初始化。所以,如果函数从它的指针参数中读取,从技术上讲,你有未定义的行为。如果函数将指针视为多元素数组的开始并访问第零个元素之后,就会出现问题。但这些问题在某种程度上超出了问题/讨论的预期范围。

关于c - 这个 C 代码有定义的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31466226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com