삽질도 두드려 보고,

DESIGN YOUR EXPERIENCE

4.4 상대 분기(Relative Jumps)

본 토픽은 현재 준비중입니다.공동공부에 참여하시면 완성 되었을 때 알려드립니다.
토픽 삽질도 두드려 보고, > 클라이언트 프로그래밍 > NSIS

 레이블과는 다르게, 이름에서 알 수 있듯이 상대 분기는 호출된 상대 위치와 연관되어 있습니다. 레이블이 사용되는 어디든지 상대 분기를 사용할 수 있습니다. 상대 분기는 숫자로 표시됩니다. +1은 현재 인스트럭션에서 다음 인스트럭션으로 분기합니다. (기본 진행), +2는 첫번째 인스트럭션을 무시하고 두번째 인스트럭션으로 건너뜁니다. -2는 뒤로 두번째 인스트럭션으로 건너뜁니다. 그리고 +10은 9번째 인스트럭션까지 무시하고 10번째 인스트럭션으로 건너뜁니다.

 인스트럭션이란 런타임 시 수행되는 모든 명령어들입니다. MessageBox, Goto, GetDLLVersion, FileRead, SetShellVarContext가 모두 인스트럭션입니다. 하지만 AddSize, Section, SectionGroup, SectionEnd, SetOverwrite (그리고 Compiler Flags의 모든 것), Name, SetFont, LangString은 컴파일 타임에 수행되기 때문에 인스트럭션이 아닙니다.

Goto +2
   MessageBox MB_OK "이 메시지 박스는 절대 볼 수 없습니다."
 MessageBox MB_OK "마지막 메시지가 건너뛰어졌기 때문에 이 메시지 박스가 나타납니다."
Goto +4
 MessageBox MB_OK "다음 메시지 박스는 건너뛰어집니다."
 Goto +3
 MessageBox MB_OK "이 메시지 박스는 절대 볼 수 없습니다."
 Goto -3
 MessageBox MB_OK "완료"

 매크로 삽입은 상대 분기와 관련하여 한 개의 인스트럭션으로 간주되지 않습니다. 매크로는 상대 분기가 적용되기 전에 확장됩니다. 따라서 상대 분기는 삽입된 매크로 내부의 코드로 분기할 수 있습니다. 다음 코드는 매크로를 건너뛰지 않습니다. 고로 메시지 박스가 나타납니다.

!macro relative_jump_test
  MessageBox MB_OK "first macro line"
  MessageBox MB_OK "second macro line"
!macroend

Goto +2
!insertmacro relative_jump_test

 매크로 적용 시 아래와 같이 매크로 부분만 붙여넣어 계산하면 쉽습니다.

Goto +2
MessageBox MB_OK "first macro line"
MessageBox MB_OK "second macro line"
  • 봤어요 0명

댓글

댓글 본문