Art of Pr0gr4m

C Initializer 주저리 본문

IT/C Language

C Initializer 주저리

pr0gr4m 2018. 2. 18. 02:05

C언어 좀 만지다가, int a = { 2 };와 같은 문법이 잘 동작하는걸 보고 오랜만에 표준 문서를 뒤져봤다.




KNK 같은 책의 initializers 파트에서 보면 simple variable은 expression of the same type as the variable로 초기화하고, array, structure, or union은 a series of values enclosed in braces로 초기화한다고 나온다.




그런데, 대박. ISO/IEC 9899:201x 6.7.9.11 번을 보면 "The initializer for a scalar shall be a single expression, optionally enclosed in braces." 라고 나와있다.. optionally enclosed in braces.. 헐.. 몰랐던건데..?

나름 C언어 문법 열심히 공부했었다고 생각했었는데 신선한 충격이었다.




사실 찾아보게 된 계기는 페이스북에 있는 질문글에 잘못된거같은 초기화 구문이 있어서 (simple type array를 pointer type array로 초기화하려고함. char arr[] = "abc"; 여야 하는데 char arr[] = { "abc" };와 같이 초기화한걸 보고 잘못된걸로 보았음) 확인차 찾아본건데..



내가 잘못알고 있었다.. 물론 질문자께서 저것까지 의도하신걸로 보이진 않지만, 내 무지를 깨달았다.






아무튼 결론은, 질문글 보고 의아하면 찾아보면 큰 도움이 된다는 것과, 내가 잘못 알고 있을 수 있다고 언제나 열어두고 생각해야 된다는 것인거 같다




'IT > C Language' 카테고리의 다른 글

동일한 포인터 역참조 시 값이 다른 케이스  (1) 2023.10.06
ISO/IEC 9899 (draft)  (2) 2017.07.10