NSIS 사용자 설명서

본 토픽은 현재 준비중입니다. 공동공부에 참여하시면 완성 되었을 때 알려드립니다.

4.4 상대 분기(Relative Jumps)

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

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

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

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

1
2
3
4
5
6
7
!macro relative_jump_test
MessageBox MB_OK "first macro line"
MessageBox MB_OK "second macro line"
!macroend
Goto +2
!insertmacro relative_jump_test

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

1
2
3
Goto +2
MessageBox MB_OK "first macro line"
MessageBox MB_OK "second macro line"

댓글

댓글 본문
버전 관리
Hyunseok Lim
현재 버전
선택 버전
공동공부
graphittie 자세히 보기