매크로가있는 "형식에 대한 인수가 너무 많습니다"

b 데 그난

빠르고 더러운 출력에 사용하는 디버그 매크로가 있습니다. gcc 5.4에서 코드를 깔끔하게 컴파일하는 방법을 결정하려고 노력했습니다. 이전 버전의 gcc (4.x) 또는 clang (11.0.3)에서는 문제가 발생하지 않습니다. 오류는 다음과 같습니다.

main.c: In function ‘main’:
main.c:4:38: warning: too many arguments for format [-Wformat-extra-args]
         do { if (1){ fprintf(stdout, "debug:%s:%04d:%s: " fmt, __FILE__, \
                                      ^
main.c:10:2: note: in expansion of macro ‘DEBUGPRINT’
  DEBUGPRINT("How to have no arguments?\n", NULL);

이 문제를 해결하는 방법을 결정하는 데 사용했던 코드는 다음과 같습니다.

#include <stdio.h>

#define DEBUGPRINT(fmt, ...) \
    do { if (1){ fprintf(stdout, "debug:%s:%04d:%s: " fmt, __FILE__, \
                            __LINE__, __func__, __VA_ARGS__);} } while (0)

int main(int argc, char *argv[])
{
    DEBUGPRINT("nums: %04i, %04i\n", 0x1234,0x5678);
    DEBUGPRINT("How to have no arguments?\n", NULL);
    return(0);
}   

보시다시피 내가 논쟁이 있으면 문제가 없습니다. 인수가없는 메시지가있는 경우에만 가능합니다. '% s'와 함께 "\ n"을 전달할 수 있다고 생각하지만 NULL을 처리하는 방법이 있는지 궁금합니다.

루이스 콜로라도

인수를 갖지 않으려면 다음을 수행 할 수 있습니다.

#include <stdio.h>

/* SEPARATE THE COMMA FROM THE __VA_ARGS__ macro with
 * the ## token */
#define DEBUGPRINT(fmt, ...) \
    do { if (1){ fprintf(stdout, "debug:%s:%04d:%s: " fmt, __FILE__, \
                            __LINE__, __func__,## __VA_ARGS__);} } while (0)
/* THIS TOKEN ELIMINATES THE COMMA ------------^^  */

int main(int argc, char *argv[])
{
    DEBUGPRINT("nums: %04i, %04i\n", 0x1234,0x5678);
    DEBUGPRINT("How to have no arguments?\n");
    return(0);
}   

나는 표준에 포함되어 있지 않지만 CLANG 및 GCC 컴파일러가 공유하는 확장입니다.

이것은 내 시스템의 출력입니다.

$ a.out
debug:pru3225.c:0012:main: nums: 4660, 22136
debug:pru3225.c:0013:main: How to have no arguments?
$ _

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

printf ( "% f", x) ok, printf ( "% F", x) 오류 형식에 대한 인수가 너무 많습니다.

분류에서Dev

printk에 대한 Linux 커널 모듈 오류 : 형식에 대한 인수가 너무 많습니다.

분류에서Dev

매크로가있는 눈금 상자

분류에서Dev

연결 매개 변수가있는 X- 매크로

분류에서Dev

VBA를 따옴표가있는 매크로로 바꾸기

분류에서Dev

')'를 예상하는 단일 매개 변수가있는 fprintf 매크로

분류에서Dev

매크로 식별자가있는 FreeRTOS 정적 배열 선언

분류에서Dev

매크로가있는 동적 식별자

분류에서Dev

누산기가있는 NASM 범위 매크로

분류에서Dev

isnan 매크로가있는 C if 문 괄호

분류에서Dev

특정 셀 (VBA)에 "-"가있는 경우 매크로에 복사

분류에서Dev

매크로 요소가 다른 매크로에 있는지 확인하는 방법

분류에서Dev

함수로 표현할 수없는 매크로가 있습니까?

분류에서Dev

내부에있는 경우 매크로?

분류에서Dev

고정 열이있는 가변 개수의 행을 복사하는 매크로

분류에서Dev

여러 셀에 변수가있는 수식을 작성하는 매크로

분류에서Dev

조건이있는 다른 열을 추가하는 VBA / 매크로

분류에서Dev

명명 된 기호가있는 매크로를 올바르게 작성

분류에서Dev

매크로 아래의 코드가 컴파일되고 있는지 확인

분류에서Dev

스칼라 매크로가있는 비스 칼라 소스 위치

분류에서Dev

Excel 매크로 : 가변 열이있는 특정 행의 값 인쇄

분류에서Dev

VBA Excel : 동적 범위가있는 매크로 생성 그래프

분류에서Dev

LibreOffice 4.2.7.2 :이 문서에는 매크로가 포함되어 있습니다.

분류에서Dev

매크로가있는 제목을 제외한 모든 스타일 지우기

분류에서Dev

숨겨진 Vba 코드 단추가있는 VBA 실행 매크로

분류에서Dev

매크로가있는 데이터 파일을 어떻게 참조합니까?

분류에서Dev

날짜 및 ID가있는 Comapring 열에 대한 매크로 및 강조 표시

분류에서Dev

Scala 매크로 주석-유형 매개 변수가있는 케이스 클래스

분류에서Dev

매크로 변수에 요소가 있는지 확인하는 기능이 있습니까?

Related 관련 기사

  1. 1

    printf ( "% f", x) ok, printf ( "% F", x) 오류 형식에 대한 인수가 너무 많습니다.

  2. 2

    printk에 대한 Linux 커널 모듈 오류 : 형식에 대한 인수가 너무 많습니다.

  3. 3

    매크로가있는 눈금 상자

  4. 4

    연결 매개 변수가있는 X- 매크로

  5. 5

    VBA를 따옴표가있는 매크로로 바꾸기

  6. 6

    ')'를 예상하는 단일 매개 변수가있는 fprintf 매크로

  7. 7

    매크로 식별자가있는 FreeRTOS 정적 배열 선언

  8. 8

    매크로가있는 동적 식별자

  9. 9

    누산기가있는 NASM 범위 매크로

  10. 10

    isnan 매크로가있는 C if 문 괄호

  11. 11

    특정 셀 (VBA)에 "-"가있는 경우 매크로에 복사

  12. 12

    매크로 요소가 다른 매크로에 있는지 확인하는 방법

  13. 13

    함수로 표현할 수없는 매크로가 있습니까?

  14. 14

    내부에있는 경우 매크로?

  15. 15

    고정 열이있는 가변 개수의 행을 복사하는 매크로

  16. 16

    여러 셀에 변수가있는 수식을 작성하는 매크로

  17. 17

    조건이있는 다른 열을 추가하는 VBA / 매크로

  18. 18

    명명 된 기호가있는 매크로를 올바르게 작성

  19. 19

    매크로 아래의 코드가 컴파일되고 있는지 확인

  20. 20

    스칼라 매크로가있는 비스 칼라 소스 위치

  21. 21

    Excel 매크로 : 가변 열이있는 특정 행의 값 인쇄

  22. 22

    VBA Excel : 동적 범위가있는 매크로 생성 그래프

  23. 23

    LibreOffice 4.2.7.2 :이 문서에는 매크로가 포함되어 있습니다.

  24. 24

    매크로가있는 제목을 제외한 모든 스타일 지우기

  25. 25

    숨겨진 Vba 코드 단추가있는 VBA 실행 매크로

  26. 26

    매크로가있는 데이터 파일을 어떻게 참조합니까?

  27. 27

    날짜 및 ID가있는 Comapring 열에 대한 매크로 및 강조 표시

  28. 28

    Scala 매크로 주석-유형 매개 변수가있는 케이스 클래스

  29. 29

    매크로 변수에 요소가 있는지 확인하는 기능이 있습니까?

뜨겁다태그

보관