printf의 매크로로 인해 분할 오류가 발생했습니다.

바다 너머

"콘솔에 인쇄하고 파일에 쓰기"를 수행하는 마르코를 정의하고 싶습니다. 아래는 내 코드입니다. 누군가 "세그멘테이션 오류 (코어 덤프)"가 발생한 이유를 보여줄 수 있습니다.

#define TRC_DP(fmt, args...)  \
do {\
    FILE * fp = fopen("/home/debug.log","a+");\
    fprintf(fp,"TRC_DP(%s:%d):\t" fmt, __func__, __LINE__, ##args);\
    printf(fmt, ##args);\
    fclose(fp);\
}while(0);
룬딘

다음은 몇 가지 버그입니다.

  • TRC_DP(fmt, args...) 유효한 표준 C가 아닙니다.
  • icky do-while (0) 트릭 은 후행 세미콜론이 없다고 가정합니다.
  • fopen성공 했는지 항상 확인해야합니다 .

다음과 같은 방법으로 문제를 해결할 수 있습니다.

#define TRC_DP(fmt, ...)  \
do {\
    FILE * fp = fopen("/home/debug.log","a+");\
    if(fp != NULL) { \
      fprintf(fp,"TRC_DP(%s:%d):\t" fmt, __func__, __LINE__, __VA_ARGS__); \
      printf(fmt, __VA_ARGS__);\
      fclose(fp);\
    } \
}while(0)

그러나 이것은 심각한 추악한 코드입니다. 필요한 경우이를 함수로 바꾸고 런타임에서 형식 문자열을 연결해야합니다.

전반적으로 가능한 한 가변 인수 함수 나 매크로를 피해야합니다. 추악 할뿐만 아니라 매우 위험합니다. 변수 인수의 존재는 일반적으로 잘못된 프로그램 설계의 매우 강력한 표시입니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

하나의 dll 파일로 인해 Azure에 배포 할 때 런타임 오류가 발생했습니다.

분류에서Dev

다중 GPU의 MVAPICH로 인해 분할 오류가 발생합니다.

분류에서Dev

2D 매트릭스의 문자 재 할당으로 인해 분할 오류가 발생합니다.

분류에서Dev

아키텍처 변경으로 인해 C ++ 프로그램 분할 오류가 발생했습니다.

분류에서Dev

with_items의 여러 변수로 인해 오류가 발생했습니다.

분류에서Dev

strsep ()로 인해 분할 오류가 발생합니다.

분류에서Dev

mysql에서 3 개의 테이블로 내부 조인을 사용할 때 오류가 발생했습니다.

분류에서Dev

406 오류가 발생했습니다. 입력 종료 오류로 인해 매핑 할 콘텐츠가 없습니다.

분류에서Dev

헤더 파일의 QList 선언으로 인해 소스 파일에서 분할 오류가 발생합니다.

분류에서Dev

연결된 목록 스택의 팝 기능으로 인해 분할 오류가 발생합니다.

분류에서Dev

MemoryStream을 BitMapImage의 소스로 설정할 때 오류가 발생했습니다.

분류에서Dev

카테고리로 돌아 가기 위해 링크를 추가 할 때 NoReverseMatch 오류가 발생했습니다.

분류에서Dev

왜 이로 인해 분할 오류가 발생합니까?

분류에서Dev

코드 이름 하나의 앱에서 URL 이미지를로드 할 때 오류가 발생했습니다. 어떻게 해결할 수 있습니까?

분류에서Dev

std :: condition_variable의 메모리 위치로 인해 futex 오류가 발생할 수 있습니다.

분류에서Dev

CSV 분할로 인해 오류 발생

분류에서Dev

mpi4py irecv로 인해 분할 오류가 발생합니다.

분류에서Dev

C ++ getnstr로 인해 이상한 분할 오류가 발생합니다.

분류에서Dev

그리기 VBO로 인해 분할 오류가 발생합니다.

분류에서Dev

동적 제어로 인해 분할 오류가 발생합니다 (11).

분류에서Dev

Kubernetes의 SQL Server : 사전 로그인 핸드 셰이크 중에 오류가 발생했습니다.

분류에서Dev

C 언어의 fgets ()에 의해 빨간색으로 표시된 문자열의 \ n을 비교하는 동안 세분화 오류가 발생했습니다.

분류에서Dev

문자열을 인쇄 할 때 분할 오류가 발생했습니다.

분류에서Dev

인코딩 문제로 인해 decode_json 오류가 발생했습니다.

분류에서Dev

우분투에서 루트로 로그인하는 동안 오류가 발생했습니다.

분류에서Dev

XPath 표현식 평가로 인해 오류가 발생했습니다.

분류에서Dev

IdHTTP 예외로 인해 분할 오류가 발생 함

분류에서Dev

잘못된 재 할당으로 인해 분할 오류가 발생합니까?

분류에서Dev

Option Strict ON으로 인해 일부 오류가 발생했습니다.

Related 관련 기사

  1. 1

    하나의 dll 파일로 인해 Azure에 배포 할 때 런타임 오류가 발생했습니다.

  2. 2

    다중 GPU의 MVAPICH로 인해 분할 오류가 발생합니다.

  3. 3

    2D 매트릭스의 문자 재 할당으로 인해 분할 오류가 발생합니다.

  4. 4

    아키텍처 변경으로 인해 C ++ 프로그램 분할 오류가 발생했습니다.

  5. 5

    with_items의 여러 변수로 인해 오류가 발생했습니다.

  6. 6

    strsep ()로 인해 분할 오류가 발생합니다.

  7. 7

    mysql에서 3 개의 테이블로 내부 조인을 사용할 때 오류가 발생했습니다.

  8. 8

    406 오류가 발생했습니다. 입력 종료 오류로 인해 매핑 할 콘텐츠가 없습니다.

  9. 9

    헤더 파일의 QList 선언으로 인해 소스 파일에서 분할 오류가 발생합니다.

  10. 10

    연결된 목록 스택의 팝 기능으로 인해 분할 오류가 발생합니다.

  11. 11

    MemoryStream을 BitMapImage의 소스로 설정할 때 오류가 발생했습니다.

  12. 12

    카테고리로 돌아 가기 위해 링크를 추가 할 때 NoReverseMatch 오류가 발생했습니다.

  13. 13

    왜 이로 인해 분할 오류가 발생합니까?

  14. 14

    코드 이름 하나의 앱에서 URL 이미지를로드 할 때 오류가 발생했습니다. 어떻게 해결할 수 있습니까?

  15. 15

    std :: condition_variable의 메모리 위치로 인해 futex 오류가 발생할 수 있습니다.

  16. 16

    CSV 분할로 인해 오류 발생

  17. 17

    mpi4py irecv로 인해 분할 오류가 발생합니다.

  18. 18

    C ++ getnstr로 인해 이상한 분할 오류가 발생합니다.

  19. 19

    그리기 VBO로 인해 분할 오류가 발생합니다.

  20. 20

    동적 제어로 인해 분할 오류가 발생합니다 (11).

  21. 21

    Kubernetes의 SQL Server : 사전 로그인 핸드 셰이크 중에 오류가 발생했습니다.

  22. 22

    C 언어의 fgets ()에 의해 빨간색으로 표시된 문자열의 \ n을 비교하는 동안 세분화 오류가 발생했습니다.

  23. 23

    문자열을 인쇄 할 때 분할 오류가 발생했습니다.

  24. 24

    인코딩 문제로 인해 decode_json 오류가 발생했습니다.

  25. 25

    우분투에서 루트로 로그인하는 동안 오류가 발생했습니다.

  26. 26

    XPath 표현식 평가로 인해 오류가 발생했습니다.

  27. 27

    IdHTTP 예외로 인해 분할 오류가 발생 함

  28. 28

    잘못된 재 할당으로 인해 분할 오류가 발생합니까?

  29. 29

    Option Strict ON으로 인해 일부 오류가 발생했습니다.

뜨겁다태그

보관