Closed enghqii closed 9 years ago
초기값이 없으면 자동으로 0으로 초기화한다는 의미인가요?
네 그렇습니다. 여기서 안 해주면 VarDefExpression에서 저 switch문을 넣어도 됩니다. 하지만 그러면 좀 복잡해질것 같아서 빼냈습니다.
암묵적으로 제공되는 초기값 0을 기반으로 스크립트를 작성할 수 있다는 단점은 있을테지만 일단 구현이 간단해 진다면 0으로 초기화하는 것에 반대는 없습니다.
참.. 그러면 배열이나 struct 같은 변수들도 다 0으로 초기화해야 할 것 같네요.
그냥 초기값이 없으면 undefined 상태로 두고, 나중에 혹시 값을 참조하려고 할 때 오류를 발생시키는 것은 어떨까요? 그 편이 구현이 더 간단하지 않을까요?
네 그게 구현하긴 훨씬 편하긴 합니다. 그러면 자바에서처럼 클래스 인스턴스 생성 안 해주면 사용 못하는 식이 되겠네요.
var U8 a;
var U16 b = a + 3 // err
비슷한 개념이 되겠네요. 어쨌든 값이 정해지지 않았을 때 해당 변수를 읽으려고 시도하면 오류를 내는 것은 자연스러운 개념 아닐까요?
$ echo 'int main(void) { int a; int b = a + 1; return 0; }' | gcc -xc -W -
<stdin>: In function ‘main’:
<stdin>:1:29: warning: ‘a’ is used uninitialized in this function [-Wuninitialized]
<stdin>:1:22: note: ‘a’ was declared here
$ echo 'b = a + 1' | python
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
일단 실제로 VarDefStatement에서 이 함수를 사용하고 있는건 아니니 선언부와 정의부만 빼서 다시 올리겠습니다.
Value에 정적 멤버 함수로 helper 함수들을 만들었습니다.