[英]What is the simplest way to write to an ip address from within a C program?
[英]Simplest way to determinize a C program
考虑下面的C程序:
#include <stdio.h>
int f() {
printf("f");
return 1;
}
int g() {
printf("g");
return 2;
}
int main() {
return f() + g();
}
根据C标准,该程序没有单一的确定性行为,由于main
函数中的总和,它包含两个子表达式,以及以下C99标准的摘录:
§6.5(...)子表达式的评估顺序和副作用发生的顺序都是未指定的。
因此,打印fg
和gf
都是该程序的有效输出。 在实践中,给定的编译器将选择单个固定的评估顺序(例如,在这种情况下,从左到右的gcc),但如果我想要可靠地比较不同编译器之间的输出,我需要确保我的程序有一个定义的行为。
我的问题是:最简单的方法是什么? 有没有办法避免包含临时变量(例如, int tmp = f(); return tmp + g();
)?
答案是直接而简单的:避免未指明的行为。
对于您的示例,如果main
的返回值无关紧要,您可以使用:
return f(), g();
逗号运算符可以确保操作数从左到右执行。
如果需要f() + g()
,则需要使用临时变量。
不是来自标准; 最简单的方法是使用临时变量。
要强制执行评估顺序,您需要在函数调用之间建立一个序列点。
最简单的方法是使用局部变量来存储中间结果。
除非您有深度递归或极其严格的内存限制,否则这很少会出现问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.