30/09/2018, 16:02

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
Nguyễn Minh Dũng viết 18:03 ngày 30/09/2018

Đá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.

which can accept variable number of arguments?

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

Đỗ Trung Quân viết 18:03 ngày 30/09/2018

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

Đỗ Trung Quân viết 18:04 ngày 30/09/2018

Vì stdio.h có include stdarg.h

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

Nguyễn Minh Dũng viết 18:16 ngày 30/09/2018

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

Đỗ Trung Quân viết 18:04 ngày 30/09/2018

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, ...)
{
    /* ... */
}
Nguyễn Minh Dũng viết 18:03 ngày 30/09/2018

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;
}
Bài liên quan
0