2011-05-06 4 views
0
15 ERROR_MACRO("Error is in %s on line %d\n", 
16    __FILE__, __LINE__); 

내가 무엇입니까의 올바른 동작입니다 위의 형식은 다음과 같습니다.이 출력 다음 __LINE__

15 ERROR_MACRO("Error is in %s on line %d\n", \ 
16    __FILE__, __LINE__); 

"16 행"대신 "15 행"을 사용해야합니까?

"15 호선"을 얻으려면 어떻게해야합니까?

답변

2

__LINE__은 항상 나타나는 정확한 줄 번호로 확장됩니다. 컴파일러가 여러 행에 걸쳐있는 코드에 대해 오류를보고하는 방법은 컴파일러에 달려 있지만 대부분의 컴파일러는 명령문이 시작된 행을 사용합니다 (대부분의 오류는 단일 문자로만 국한 될 수 없기 때문에).

컴파일러에서 명령문에 대한 생각을하기 전에 일반적으로 전처리가 발생하므로 현재 명령문이 나타나는 행을 결정할 수있는 매크로가 없습니다.

+0

+ 좋은 캐치, 잘못된 줄 바꿈으로 인해 줄 바꿈을 잡지 못했습니다! –

0

코드에서 15 번째 줄로 ERROR_MACRO를 이동 하시겠습니까? __LINE__은 현재 파일 내의 행 번호입니다.

ERROR_MACRO("Err in %s on line %d\n", 
       __FILE__, __LINE__ - 1); 

더 좋은 이유 : 당신은 당신의 코드를 이동하지 않는 한 변경 할 (법적) 방법 ...

0

통화를 다음 줄에 __LINE__를 사용을 주장하는 경우는, 그럼 그냥 할 수는 없다 당신이 당신의 매크로 매크로를 정의하지 않습니다

#define MY_ERR ERROR_MACRO("Err in %s on line %d", __FILE__, __LINE__) 

지금 당신은 대신 선 길이 제한에 대한 걱정의 짧은 MY_ERR;를 호출 할 수 있습니다 (당신이하고있는 이유입니다, 나는 가정).