C错误:“ ...”标记之前应为“;”,“或”)

时间:2019-04-12 13:09:42

标签: c gcc prototype variadic

我有问题。 C语言中的面向对象编程的概念得到了功课。我需要使用可变参数函数。但是我错了。如果您能帮助我,我将不胜感激。我是编码新手。

RastgeleKarakter.h:

#ifndef RASTGELEKARAKTER_H
#define RASTGELEKARAKTER_H
struct RASTGELEKARAKTER{
// code
};

RastgeleKarakter SKarakterOlustur(int...); // prototype
void Print(const RastgeleKarakter);
#endif

RastgeleKarakter.c:

#include "RastgeleKarakter.h"
#include "stdarg.h
RastgeleKarakter SKarakterOlustur(int... characters){
//code
}

错误:

 make
gcc -I ./include/ -o ./lib/test.o -c ./src/Test.c
In file included from ./src/Test.c:3:0:
./include/RastgeleKarakter.h:17:38: error: expected ';', ',' or ')' before '...' token
RastgeleKarakter SKarakterOlustur(int...);

我不知道有多少个参数。我想用变量函数解决这个问题。

3 个答案:

答案 0 :(得分:0)

C中的可变参数未键入且未命名。可变参数函数的正确原型是:

function onClick() {

  // create invisible dummy input to receive the focus first
  const fakeInput = document.createElement('input')
  fakeInput.setAttribute('type', 'text')
  fakeInput.style.position = 'absolute'
  fakeInput.style.opacity = 0
  fakeInput.style.height = 0
  fakeInput.style.fontSize = '16px' // disable auto zoom

  // you may need to append to another element depending on the browser's auto 
  // zoom/scroll behavior
  document.body.prepend(fakeInput)

  // focus so that subsequent async focus will work
  fakeInput.focus()

  setTimeout(() => {

    // now we can focus on the target input
    targetInput.focus()

    // cleanup
    fakeInput.remove()

  }, 1000)

}

returnType functionName(type1 ordinaryArg1, type2 ordinaryArg2, ...) 之前,您至少需要一个普通的参数。您只能通过...中的函数访问可变参数。

答案 1 :(得分:0)

参数列表不应具有类型或名称

RastgeleKarakter SKarakterOlustur(int count, ...)

{
  va_list args;
  va_start(args, count);
  int i = va_arg(args, int);
}

使用stdarg.h头文件中定义的宏来访问参数列表。 further reading

如果按照原始减速度,则意味着参数列表的所有成员都是整数,并且由于无论如何都将提供计数,因此请考虑将其更改为int count, int * list

答案 2 :(得分:0)

该错误表明编译器期望在省略号之前执行以下操作之一: -分号 -逗号 右括号

因此,原型未正确声明。 声明至少需要一个命名变量,最后一个参数必须为省略号。

例如,如果您打算将整数传递给方法,则声明可以如下:

int  sum (int count, ...);