첫째... 녹스 트리거 내에서 사용되는 모든 변수들은 static 변수라는 것.
원래 c언어 상에 어떤 함수내에서 선언된 지역변수는 함수 호출 후 종료시 무의미 해집니다... 무의미 해진다는 것은 변수가 사라진다고 봐도 무방할 것입니다.
그러나 함수내에서 지역변수가 static 으로 선언되어 있다면 말이 달라집니다...
해당 함수가 끝난다고 할지라도 프로그램이 종료되기 전까지 남아있다는 것을 의미하죠.
녹스 트리거의 변수들도 그렇습니다...
함수내에서 선언된 변수든... 외에서 선언된 변수든 간에 항상 static 상태이기 때문에... 해당 맵이 끝나지 않는한 유효하다는 얘기입니다.
두번째... 녹스 트리거 상에서 string!
string 의 경우 c 에는 존재하지 않는 데이터타입입니다.. 그러나 문자열임을 알리는 데이터 타입 임에는 변함없죠...
중요한 것은 string 의 개수제한이 존재한다는 것입니다...
일반적으로 스타1 과 동일하게 최대 string 의 개수는 1024 개 입니다..
공교롭게도 1024 개를 다 쓰는 것은 녹스에서 있을 수 없는 일입니다..
string 의 경우, 트리거 내에 같은 값을 가진 string 끼리는 컴파일러가 하나로 묶어줍니다.. 그러므로 트리거 작성자가 string 중복까지는 크게 신경쓸 필요는 없죠..
그러나 이 스트링이 while 문 같은 반복문에 들어올 경우에 상황은 달라집니다...
while 문이 천번 돌 경우 한번 두번씩 돌 때마다 선언되는 string 에 대비해 string 테이블을 녹스가 별도로 초기화를 해서 비워주어야 하는데 녹스가 멍청해서 반복문이 끝날때 까지 반복문으로 인해 선언된 string 들을 차곡차곡 쌓아버립니다.. 이때 중복의 유무와는 상관없이 무조건 쌓입니다...
그렇다보니 쌓이는 문자열들이 string 영역으로 할당된 범위를 초과하여 다른 영역까지 침범하는 사태까지 벌어집니다..
정말 이 부분에 있어서는 녹스 제작자의 잘못입니다... 그러나 별수 없죠...
우회해야지요...
이 경우는 반복문 내에서 사용될 문자열(string)들을 타 함수에서 미리 선언하여 사용할 수 밖에 없다는 것입니다...
이 사항들을 미리 숙지하시면 녹스 트리거를 코딩하다가 멘붕이 올 일은 없을 것입니다.