gpt4 book ai didi

c - "Expected token ' ) ' got int"在 C 中

转载 作者:行者123 更新时间:2023-11-30 15:57:03 25 4
gpt4 key购买 nike

我对下面编写的代码有一个小问题。 VS 2010 编译它,运行我得到了预测的结果。但是当我尝试使用 Qt Creator 编译此代码时,我每次都会收到此警告:“预期 token ')' 为 int”。是的,程序将由 Qt Creator 运行,但程序会崩溃。这段代码有什么问题:

#include <stdio.h>
#include <stdarg.h>
#define ARR_SIZE 2

int **getAddresses(int amount, ...)
{
static int *arr[ARR_SIZE] = {};
va_list vl;

if(amount > 0)
{
va_start(vl, amount);
int i;
for(i = 0; i < amount; i++)
{
*(arr + sizeof(int) * i) = va_arg(vl, int*); //This one is highlighted by the Qt Creator.
}
va_end(vl);
return 0;
}
else
{
return arr;
}
}

int main(void)
{
int a = 3, b = 5;

getAddresses(ARR_SIZE, &a, &b);
printf("BEFORE: %d, %d\n", a, b);

int **res = getAddresses(0), i;
for(i = 0; i < ARR_SIZE; i++)
{
*(*(res + sizeof(int) * i)) += 5;
}

printf("AFTER: %d, %d\n", a, b);

return 0;
}

感谢您事先的答复。

添加:Qt Creator 突出显示这行代码 *(arr + sizeof(int) * i) = va_arg(vl, int*);

此外,Dev++ 能够运行此代码,而不会出现任何警告、错误或崩溃。

GCC 能够在 Fedora linux 14 下编译它:

[Admin@localhost testerprog]$ gcc tester.c -o tester
[Admin@localhost testerprog]$ ls
tester tester.c
[Admin@localhost testerprog]$ ./tester
BEFORE: 3, 5
AFTER: 8, 10
[Admin@localhost testerprog]$

GCC版本为4.5.1 20100924(Red Hat 4.5.1-4)

最佳答案

--- 已编辑,因为原始帖子有点错误,但同一行可能是原因 ---

由于错误特别提到查找 int 而不是右括号,我怀疑有问题的行是

        *(arr + sizeof(int) * i) = va_arg(vl, int*);

虽然你的代码是有效的 C/C++,但我会覆盖我对 VS 编译器犯了错误的怀疑,但也对 Qt 编译器提出类似的怀疑

  1. 其中存在错误,并且需要 R 值,而不是类型。
  2. 已将 va_arg 引用包装在其他一些 qt_xxx 样式包装器中,以允许在 QT 框架中正确编译。

--- 原帖如下 ---

int 是 C/C++ 中的关键字,因此不能安全地将其用作变量。好像是这条线

        *(arr + sizeof(int) * i) = va_arg(vl, int*);

请求变量int所保存的地址值,而不是int指针引用的值。 VS 编译器的错误检查很可能不那么强大,导致默默地接受错误。

关于c - "Expected token ' ) ' got int"在 C 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10741402/

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