여기에 두 번째 변형이 있습니다.
변수는 첫 번째 할당 후 메모리의 동일한 위치를 가리키는 것으로 밝혀졌습니다.
if (firsttime) { backup = StringVal;
이 퀴노아가 어떤 빌드에서 뻗어나가는지 알고 싶습니다.
여기 예가 있습니다
extern string StringVal = "string" ; string backup = "" ; bool firsttime = true ; int init() { Print ( "=========================" ); Print ( "StringVal=" ,StringVal, " backup=" ,backup); if (StringVal != backup){ if (firsttime) { backup = StringVal; Print ( " First Call ===> backup = StringVal" ); } Print ( "StringVal=" ,StringVal, "< > backup=" ,backup); } firsttime = false ; } int start() { }
내가 전문가처럼 컴파일하면
그런 다음 StringVal이 변경되면 백업이 즉시 변경됩니다.
마지막 Print가 호출되지 않은 상태에서
개는 어디에 묻혔습니까?
음, StringVal을 수동으로 변경하면 초기화가 바로 작동합니다. 맞습니다...
init()가 작동한다는 것은 분명합니다.
문제는 2. 다른 조건에 관계없이 변수가 업데이트된다는 것입니다.
업데이트 조건은 없지만 업데이트가 진행 중입니다!
네 모든 것이 분명합니다
문제는 2. 다른 조건에 관계없이 변수가 업데이트된다는 것입니다.
그리고 항상
진지한 샷
비슷한 예를 들어
첫 번째 변수의 값은 두 번째 변수에 한 번만 전달되고 두 번째 변수의 값은 프로그램을 추가로 실행하는 동안 변경되지 않아야 합니다 .
그러나 첫 번째 변수가 변경될 때 마다 두 번째 변수도 변경됩니다 .
extern string Value = "O" ; string temp_= "" ; bool firsttime= true ; int start() { string txt= StringConcatenate ( " Value: " ,Value, "\n" , " temp_: " ,temp_, "\n" , " firsttime: " ,firsttime); if (firsttime) { temp_=Value; firsttime= false ; } // значение присваевается тольо ОДИН раз Print (txt); Comment (txt); }
비슷한 예를 들어
첫 번째 변수의 값은 두 번째 변수에 한 번만 전달되고 두 번째 변수의 값은 프로그램을 추가로 실행하는 동안 변경되지 않아야 합니다 .
그러나 첫 번째 변수가 변경될 때 마다 두 번째 변수도 변경됩니다 .
잘못된 - 초기화가 완료되지 않았습니다.
여기 참조의 증거가 있습니다.
전역 변수는 프로그램이 클라이언트 터미널의 메모리에 로드된 직후에 한 번 초기화됩니다.
그리고 일반적으로 초기화에 관한 것이 아니라 변수를 변경 하는 것에 관한 것입니다.
코드를 주의 깊게 읽으십시오
문제는 문자열 유형의 변수에서만 발생합니다.
다른 유형은 문제가 없습니다!
내가 전문가처럼 컴파일하면
그런 다음 StringVal이 변경되면 백업이 즉시 변경됩니다.
마지막 Print 가 호출되지 않은 상태에서
개는 어디에 묻혔습니까?