c - 意外的 C 行为

标签 c compiler-warnings

我想了解为什么我的程序无法编译,

int myfunction(int x)
{
   return x;
} 

int main(){
  int x = 10;
  int result=0;
  result=myfunction(x) * myfunction(++x);
  printf("Result is = %d", result);
}

执行后我得到:警告被视为错误 在函数“int main()”中:对“x”的操作可能未定义。 有人有想法吗?

最佳答案

myfunction(x) * myfunction(++x) 未定义,因为 operator * 的两个参数的求值顺序未指定。所以第一个或第二个调用都可以先执行,这意味着理论上 x++x 可以先计算,这会导致不同的结果。理论上。实际上,该标准只是将不这样做的责任转嫁给您。

关于c - 意外的 C 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17147189/

相关文章:

c - 如何释放Tree占用的内存,C?

Golang 编译错误

c++ - 为什么 g++ 在通过 const 引用将未初始化的值传递给函数时不报告警告?

创建一个程序,要求用户输入名称并使用 C 创建 10 个名称序列化的文件

无法使用 "page-as-heap"选项运行 valgrind Massif

c++ - 编译单个大头文件(VS : C1063)

c++ - 如何禁用有关某些库的编译器警告?

c - 如何将结构数组传递给GPU?

java - 消除 Jasper 生成的 Java 源文件中 JSP 的 Javac 警告?

c++ - 使用代码调整删除 "comparison is always false"警告