일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Linux
- Apache
- spinlock
- lruvec
- proc
- vmalloc
- allocator
- slab
- commit
- Android
- slowpath
- Network
- page
- fastpath
- NDK
- devicedriver
- strex
- Kernel
- kmalloc
- 카프카
- slub
- blk-mq
- vm_area_struct
- memory
- BLOCK
- pmap
- kafka
- buddy_system
- mm_struct
- multiqueue
- Today
- Total
Art of Pr0gr4m
C Initializer 주저리 본문
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 |