21 If there are fewer initializers in a brace-enclosed list than there are elements or members
of an aggregate, or fewer characters in a string literal used to initialize an array of known
size than there are elements in the array, the remainder of the aggregate shall be
initialized implicitly the same as objects that have static storage duration.
21 번 절의 표현중 마지막의 'objects that have static storage duration.' 는 아래 10번 절의
10 If an object that has automatic storage duration is not initialized explicitly, its value is
indeterminate. If an object that has static storage duration is not initialized explicitly,
then:
— if it has pointer type, it is initialized to a null pointer;
— if it has arithmetic type, it is initialized to (positive or unsigned) zero;
— if it is an aggregate, every member is initialized (recursively) according to these rules;
— if it is a union, the first named member is initialized (recursively) according to these
rules.
의미라고 보면 될까요?
— if it has pointer type, it is initialized to a null pointer;
— if it has arithmetic type, it is initialized to (positive or unsigned) zero;
그런데 10번 절의 내용은 초기화 하지 않는 변수가 초기화되는 방법을 설명하는 것인데...
그렇다면 초기식에서 초기값을 명시하지 않은 element 들은 초기식이 없을 경우의 static storage duration 과 같은 방식이라는 뜻 같아요..
static storage duration 는 문맥으로 보아하니 전역변수 얘기같고요..
3 An object whose identifier is declared with external or internal linkage, or with the
storage-class specifier static has static storage duration. Its lifetime is the entire
execution of the program and its stored value is initialized only once, prior to program
startup.
4 An object whose identifier is declared with no linkage and without the storage-class
specifier static has automatic storage duration.
표준 문서를 잘 읽을 줄 알아야겠다 하는 생각 해봅니다.
제가 전역 변수라고 했었는데 위 정의에 따르고 제가 알고 있는 용어로 표현하면,
'정적 혹은 전역 변수 혹은 함수 혹은 객체(C++ 이라면)' 정도가 적당할 것 같은데요..?
ISO/IEC 9899:1999의 6.7.8.10과
ISO/IEC 9899:1999의 6.7.8.10과 6.7.8.19
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
한번 검색해
한번 검색해 봤습니다.
http://flash-gordon.me.uk/ansi.c.txt
http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
참고하세요.
ps. 올리고 보니 늦었네요. :)
추가로 6.7.8.21이요.
(EOF)
----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------
21 If there are fewer
21 If there are fewer initializers in a brace-enclosed list than there are elements or members
of an aggregate, or fewer characters in a string literal used to initialize an array of known
size than there are elements in the array, the remainder of the aggregate shall be
initialized implicitly the same as objects that have static storage duration.
21 번 절의 표현중 마지막의 'objects that have static storage duration.' 는 아래 10번 절의
10 If an object that has automatic storage duration is not initialized explicitly, its value is
indeterminate. If an object that has static storage duration is not initialized explicitly,
then:
— if it has pointer type, it is initialized to a null pointer;
— if it has arithmetic type, it is initialized to (positive or unsigned) zero;
— if it is an aggregate, every member is initialized (recursively) according to these rules;
— if it is a union, the first named member is initialized (recursively) according to these
rules.
의미라고 보면 될까요?
— if it has pointer type, it is initialized to a null pointer;
— if it has arithmetic type, it is initialized to (positive or unsigned) zero;
그런데 10번 절의 내용은 초기화 하지 않는 변수가 초기화되는 방법을 설명하는 것인데...
그렇다면 초기식에서 초기값을 명시하지 않은 element 들은 초기식이 없을 경우의 static storage duration 과 같은 방식이라는 뜻 같아요..
static storage duration 는 문맥으로 보아하니 전역변수 얘기같고요..
아, 표준문서 읽기가 쉽지는 않네요. 글이라기 보다는 프로그램 코드 보는 것 같네요..
저는 개인적으로 아래와 같은 쉬운 설명들만을 위주로 참고 해왔거든요.
http://winapi.co.kr/clec/cpp1/9-2-3.htm
표준문서를 보는 것이 에러스트링의 의미를 해석하는데는 도움이 많이 될 것 같다는 느낌입니다.
에러 문구는 주로 표준의 어떤 내용 위반이다 라는 식인 것 같아서요..
그런데 읽기가 참 어려운 것 같아요.. 포인터 따라가며 해석해야하는 프로그램 코드같아서요..
static storage duration 이라는 것
static storage duration 이라는 것 자체도 정의가 있습니다.
전역 변수라고 보시면 안됩니다.
Neogeo - Future is Now.
찾았어요..
6.2.4 Storage durations of objects
3 An object whose identifier is declared with external or internal linkage, or with the
storage-class specifier static has static storage duration. Its lifetime is the entire
execution of the program and its stored value is initialized only once, prior to program
startup.
4 An object whose identifier is declared with no linkage and without the storage-class
specifier static has automatic storage duration.
표준 문서를 잘 읽을 줄 알아야겠다 하는 생각 해봅니다.
제가 전역 변수라고 했었는데 위 정의에 따르고 제가 알고 있는 용어로 표현하면,
'정적 혹은 전역 변수 혹은 함수 혹은 객체(C++ 이라면)' 정도가 적당할 것 같은데요..?
이 스레드에서는 배열의 (암묵적) 초기화 방법에 대해서는 아주 잘 알게 되었습니다.
짚어주셔서 감사합니다.
댓글 달기