2010-03-03 2 views
6

Что это значит?Что означает «...» в объявлении функции C?

void message(int x, int y, ...) 

Я не могу понять, что ... есть. Может ли кто-нибудь объяснить?

+1

Следует отметить, что в C пустые параметры функции() означают то же самое, что и (...), то есть функция может принимать любые параметры. Вы должны использовать (void), чтобы заявить, что он не принимает никаких. В C++() означает, что он не принимает никаких, как и следовало ожидать. – Tronic

+2

Пустой список параметров '()' does ** not ** означает то же, что и '(...)'. Пустой список параметров означает, что функция принимает фиксированное, но неуказанное количество исправлений. '(...)' означает, что он принимает переменное количество аргументов (и довольно бесполезен, потому что функция никогда не сможет получить доступ к этим аргументам без хотя бы одного фиксированного аргумента). – caf

ответ

5

Unspecified/переменное количество параметров. Для того, чтобы справиться с такой функцией, вы должны использовать тип va_list и va_start, va_arg и функции va_end:

Пример взят из here:

#include <stdlib.h> 
     #include <stdarg.h> 
     #include <stdio.h> 

     int maxof(int, ...) ; 
     void f(void); 

     main(){ 
       f(); 
       exit(EXIT SUCCESS); 
     } 

     int maxof(int n args, ...){ 
       register int i; 
       int max, a; 
       va_list ap; 

       va_start(ap, n args); 
       max = va_arg(ap, int); 
       for(i = 2; i <= n_args; i++) { 
         if((a = va_arg(ap, int)) > max) 
           max = a; 
       } 

       va_end(ap); 
       return max; 
     } 

    void f(void) { 
      int i = 5; 
      int j[256]; 
      j[42] = 24; 
      printf("%d\n",maxof(3, i, j[42], 0)); 
    } 

Вы можете найти более подробную информацию here

+0

Ваш код и предложение мне очень помогают. thaks – ambika

8

... обозначает переменную список аргументов, к которым можно получить доступ через va_arg, va_end and va_start.

+0

есть хороший программист. вы один из них. спасибо большое – ambika

3

Вы где-то определили сообщение функции, которое принимает не менее двух аргументов типа int, а затем некоторые необязательные аргументы, обозначенные «...». (printf - это еще одна функция с дополнительными аргументами).

Доступ к дополнительным аргументам можно получить с помощью функций va_*.

0

Это переменная аргумент формальный параметр. Исходя из синтаксической перспективы, вы можете передать переменное количество параметров (не менее двух, которые являются x и y, но даже больше).

2

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

Смежные вопросы