Poll: Kiểm tra kiến thức C - 1.18

Các bạn thảo luận đáp án nhé, bài test lấy từ http://www.indiabix.com/online-test/c-programming-test/11
18.Which header file should you include, if you are going to develop a function, which can accept variable number of arguments?

  • A. varagrg.h
  • B. stdlib.h
  • C. stdio.h
  • D. stdarg.h

Đáp án chính xác là D. Nhưng chọn C hoặc có thể B cũng đúng. Vì stdio.h có include stdarg.h.

Có nghĩa là một hàm có thể nhận vào một số lượng đối số mà không cần biết trước bao nhiêu đối số.

Đố các bạn, hàm nào có khả năng này :smiley:

1 Like

stdarg.h is a header in the C standard library of the C programming language that allows functions to accept an indefinite number of arguments

1 Like

Như vậy cả 3 cái header này đều được sao anh :-?

Câu trả lời đúng nhất phải là D. stdarg.h

Viết thế này sao anh, cho 3 chấm vào?

long func(char, double, int, ...);
 
long func(char a, double b, int c, ...)
{
    /* ... */
}

Dấu ... tương đương với việc nhận vào bao nhiêu đối số đều được, kết hợp với va_list, va_startva_end

#include <stdio.h>
#include <stdarg.h>
 
/* print all non-negative args one at a time;
   all args are assumed to be of int type */
void printargs(int arg1, ...)
{
  va_list ap;
  int i;
 
  va_start(ap, arg1); 
  for (i = arg1; i >= 0; i = va_arg(ap, int))
    printf("%d ", i);
  va_end(ap);
  putchar('\n');
}
 
int main(void)
{
   printargs(5, 2, 14, 84, 97, 15, 24, 48, -1);
   printargs(84, 51, -1);
   printargs(-1);
   printargs(1, -1);
   return 0;
}
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?