【发布时间】:2020-09-07 09:53:15
【问题描述】:
注意,我不会写这样的代码。我只是好奇,它会帮助我为另一个问题写一个更好的答案。但是假设我们有这个功能:
void foo(int a, int *b)
{
*b = 2*a;
}
然后这样称呼它:
int x=42;
foo(x, &x);
除了它是一种非常强烈的代码气味之外,这会导致任何实际问题吗?是UB还是违反了C标准中的任何规则?
【问题讨论】:
-
没关系。调用时
x的当前值被复制。函数参数a包含复制的值。 -
@4386427 我没有理由认为这是非法的。只是想让它 100% 确定。毕竟,C 有时会有点奇怪。 :)
-
@4386427 因为 C 中几乎没有什么是合法的。
-
@Boann:在对标准进行充分迂腐阅读的情况下,“严格符合”程序中几乎不允许出现任何内容。另一方面,对于那些仅仅寻求“符合”的程序来说,基本上没有什么是被禁止的。
标签: c language-lawyer undefined-behavior