올바르게 이해하면 대체 취소 후 첫 번째 행은 더 이상 10이 아니고 두 번째 TMP는 VALUE이지만 10은 아닙니다. 즉. 대체는 할당과 거리가 멀다.
네. 대체는 일대일 대체일 뿐입니다. 코드로 대체할 때( 전처리기 지시문 과 혼동하지 말 것) VALUE 매크로가 정의되면 전처리기가 TMP-> VALUE-> 10을 추가로 확장하고 그렇지 않은 경우 TMP-> VALUE를 확장합니다. 동시에 전처리기 지시문은 코드 자체에 포함되지 않으며 컴파일 중에는 더 이상 존재하지 않습니다. 예시:
#define VALUE 10#define TMP VALUE
voidOnStart ()
{
Print (TMP); //10if ( false ){
#undef VALUE
#define VALUE 20Print (TMP);}
elsePrint (TMP); //20
}
네. 대체는 일대일 대체일 뿐입니다. 코드로 대체할 때( 전처리기 지시문 과 혼동하지 말 것) VALUE 매크로가 정의되면 전처리기가 TMP-> VALUE-> 10을 추가로 확장하고 그렇지 않은 경우 TMP-> VALUE를 확장합니다. 동시에 전처리기 지시문은 코드 자체에 포함되지 않으며 컴파일 중에는 더 이상 존재하지 않습니다. 예시:
예, 두 번째 대체 VALUE 20을 주석 처리하면 VALUE 변수 선언이 사라지고 컴파일러에서 이를 보지 못하고 꾸짖습니다)
#define VALUE 10// VALUE = 10#define TMP VALUE // TMP = 10 VALUE
#undef VALUE // VALUE = EMPTY#define VALUE (TMP* 2 ) // TMP = 10 EMPTY, следовательно VALUE = 20 EMPTY
모든 것이 가능합니다. 매크로 하나만 추가하면 됩니다.
결과: 20
모든 것이 가능합니다. 매크로 하나만 추가하면 됩니다.
결과: 20
이것은 매우 좋습니다. 수수께끼는 풀기 어렵습니다.
죄송합니다. 설명하려고 하는 동안 혼란스러워했습니다.
다시:
VALUE의 두 번째 정의 시 매크로 VALUE가 정의되지 않았으므로 VALUE는 다음과 같이 정의됩니다.
, TMP는 이전에도 여전히 VALUE로 정의되어 있기 때문입니다.
그러나 TMP는 VALUE의 두 번째 정의 이후에 이미
이 같은))
전처리기에서 정확히 무엇이 존재하는지 대체되며 그것이 어떻게 존재하고 어디에 정의되어 있는지는 중요하지 않습니다. 따라서 조심해야 합니다. 예시:
, 그리고 이제 함수에 악, 즉 부작용을 추가해 보겠습니다.
그리고 이것은 단지 비문이지만 보증금이이 기능에 의존한다면 어떻게 될까요?
웃기다) 언제 왔는지)
올바르게 이해하면 대체 취소 후 첫 번째 행은 더 이상 10이 아니고 두 번째 TMP는 VALUE이지만 10은 아닙니다. 즉. 대체는 할당과 거리가 멀다.
웃기다) 언제 왔는지)
올바르게 이해하면 대체 취소 후 첫 번째 행은 더 이상 10이 아니고 두 번째 TMP는 VALUE이지만 10은 아닙니다. 즉. 대체는 할당과 거리가 멀다.
네. 대체는 일대일 대체일 뿐입니다. 코드로 대체할 때( 전처리기 지시문 과 혼동하지 말 것) VALUE 매크로가 정의되면 전처리기가 TMP-> VALUE-> 10을 추가로 확장하고 그렇지 않은 경우 TMP-> VALUE를 확장합니다. 동시에 전처리기 지시문은 코드 자체에 포함되지 않으며 컴파일 중에는 더 이상 존재하지 않습니다. 예시:
네. 대체는 일대일 대체일 뿐입니다. 코드로 대체할 때( 전처리기 지시문 과 혼동하지 말 것) VALUE 매크로가 정의되면 전처리기가 TMP-> VALUE-> 10을 추가로 확장하고 그렇지 않은 경우 TMP-> VALUE를 확장합니다. 동시에 전처리기 지시문은 코드 자체에 포함되지 않으며 컴파일 중에는 더 이상 존재하지 않습니다. 예시:
예, 두 번째 대체 VALUE 20을 주석 처리하면 VALUE 변수 선언이 사라지고 컴파일러에서 이를 보지 못하고 꾸짖습니다)
모든 것이 가능합니다. 매크로 하나만 추가하면 됩니다.
결과: 20
나는 포기한다)))
정의 방법
?
나는 포기 )))
정의 방법
?
너무 빨리? 아직 모든 전문가가 연결되지는 않았습니다... 일주일만 기다리겠습니다.
힌트: 이것은 또한 작동합니다(그러나 솔루션은 약간 다릅니다)
결과: 20:15
TMP가 정의된 VALUE로 유지되었기 때문입니다.
다음은 "위에서 아래로"라는 단어에 대한 반박입니다.
그렇지 않으면 TMP는 "있는 그대로" 정의되지 않고 이전에 10으로 대체되었을 것입니다(VALUE로 대체됨).
이것은 전처리기가 코드를 한 줄씩 처리하지 않는다는 것을 의미합니다. 방법을 알아내는 것이 남아 있습니다.
@A100 , 어렵지 않다면 간단히 말해서.
구글링하고 읽을 만큼 흥미롭지는 않지만 물어볼 만큼은 충분합니다.
내 논리에 무슨 문제가 있습니까?
행이 순차적으로 구문 분석됨을 나타냅니다. 따라서 오른쪽에는 정의되지 않은 값이 없습니다.
힌트: 이것은 또한 작동합니다(그러나 솔루션은 약간 다릅니다)
따라서 MACRO 및 MACRO2와 작동 방식이 동일합니다.
내 논리에 무슨 문제가 있습니까?