在C中调用时,是否可以假定函数参数的求值顺序?根据下面的程序,当我执行它的时候似乎没有特定的顺序.

#include <stdio.h>

int main()
{
   int a[] = {1, 2, 3};
   int * pa; 

   pa = &a[0];
   printf("a[0] = %d\ta[1] = %d\ta[2] = %d\n",*(pa), *(pa++),*(++pa));
   /* Result: a[0] = 3  a[1] = 2    a[2] = 2 */

   pa = &a[0];
   printf("a[0] = %d\ta[1] = %d\ta[2] = %d\n",*(pa++),*(pa),*(++pa));
   /* Result: a[0] = 2  a[1] = 2     a[2] = 2 */

   pa = &a[0];
   printf("a[0] = %d\ta[1] = %d\ta[2] = %d\n",*(pa++),*(++pa), *(pa));
   /* a[0] = 2  a[1] = 2 a[2] = 1 */

}

推荐答案

否,函数参数在C中不按定义的顺序求值.

请看马丁·约克对What are all the common undefined behaviour that c++ programmer should know about?的回答.

C++相关问答推荐

代码打印正确输出次数过多(CS50)

为指针 struct 创建宏

如何用C(使用两个s补数算术的32位程序)计算

带双指针的2D数组

如何将FileFilter添加到FileDialog GTK 4

常数函数指针优化

如何正确地索引C中的 struct 指针数组?

ZED for SDL上的C语言服务器

如果我释放其他内容,返回值就会出错

用C宏替换strncMP函数中的参数

自定义变参数函数的C预处置宏和警告 suppress ?

如何使用指向 struct 数组的指针并访问数组中特定索引处的 struct

使用TCL C API导航到列表中的元素

如何仅使用软件重新初始化STM32微控制器中的USB枚举?

关于scanf()和空格的问题

添加函数会 destruct 嵌入式C代码(无IDE)

&stdbool.h&q;在嵌入式系统中的使用

即使客户端不发送数据,也会发生UNIX套接字读取

WSASocket在哪里定义?

将数组返回到链表