C언어 초기화 {0,} 에 대해서

hsnks100의 이미지

초기화하는 명령어중 하나인

{n,}; 이 있는데

int a[3] = {0,}; 과 같은 명령이 있으면

0, 이후로 전부 0으로 초기화하는 의미 아닌가요 ?
{1, }; 하면 1 으로 처음 요소를 초기화하고 나머지를 0으로 초기화하는걸로 알고 있는데,

표준이 아닌겁니까? 표준 문서가 있는데, 어느 부분에서 찾아봐야할지 모르겠네요.

cinsk의 이미지

ISO/IEC 9899:1999의 6.7.8.10과 6.7.8.19

neocoin의 이미지

한번 검색해 봤습니다.

참고하세요.

ps. 올리고 보니 늦었네요. :)

freestyle의 이미지

(EOF)

----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------

jeongheumjo의 이미지

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

표준문서를 보는 것이 에러스트링의 의미를 해석하는데는 도움이 많이 될 것 같다는 느낌입니다.
에러 문구는 주로 표준의 어떤 내용 위반이다 라는 식인 것 같아서요..
그런데 읽기가 참 어려운 것 같아요.. 포인터 따라가며 해석해야하는 프로그램 코드같아서요..

neogeo의 이미지

static storage duration 이라는 것 자체도 정의가 있습니다.

전역 변수라고 보시면 안됩니다.

Neogeo - Future is Now.

jeongheumjo의 이미지

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++ 이라면)' 정도가 적당할 것 같은데요..?

이 스레드에서는 배열의 (암묵적) 초기화 방법에 대해서는 아주 잘 알게 되었습니다.

짚어주셔서 감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.