Ошибка C: ожидается ';', ',' или ')' перед маркером '...' - PullRequest
0 голосов
/ 12 апреля 2019

У меня проблема.Концепция объектно-ориентированного программирования на языке C получила домашнее задание.Мне нужно использовать функции variadic.Но я получаю ошибку.Буду признателен, если вы поможете мне.Я новичок в кодировании.

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 голосов
/ 12 апреля 2019

В списке параметров не должно быть ни типа, ни имени

RastgeleKarakter SKarakterOlustur(int count, ...)

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

Используйте макросы, определенные в заголовочном файле stdarg.h, для доступа к списку параметров. дальнейшее чтение

Если под вашим исходным замедлением вы подразумевали, что все члены списка параметров являются целыми числами, и, поскольку вы все равно будете указывать счет, рассмотрите возможность его изменения на int count, int * list

0 голосов
/ 12 апреля 2019

Ошибка говорит о том, что компилятор ожидает одно из следующего перед многоточием: -точка с запятой -comma закрывающие скобки

Итак, прототип объявлен неправильно. Для объявления требуется как минимум одна именованная переменная, а последним параметром должен быть многоточие.

Например, если вы намереваетесь передать в метод целые числа, объявление может выглядеть следующим образом:

int  sum (int count, ...);
0 голосов
/ 12 апреля 2019

Вариативные аргументы в C нетипизированы и не имеют названия.Правильный прототип для функции с переменным значением:

returnType functionName(type1 ordinaryArg1, type2 ordinaryArg2, ...)

Перед ... необходимо указать хотя бы один обычный аргумент.Вы можете получить доступ к переменным аргументам только через функции из stdarg.h.

...