C언어 기초 문의드립니다.
2013.12.26 17:30
제가 C는 기초수준인지라,,
URL을 보다보니 아래와 같은 소스가 있는데요.
아래 __bitmemory 처럼 변수명에 "__"가 들어가면 어떤 의미인가요?
아래 부분에서 사용할때는 "__" 없이 쓰는거 같은데요.
(예전에 알았던거 같은데 기억이 안나네요)
#include <stdio.h>
typedef struct __bitmemory {
unsigned int bit1: 1; // 한 비트만 쓰겠다는 의미
unsigned int bit2: 1;
unsigned int bit3: 1;
unsigned int bit4: 1;
unsigned int bit5: 1;
....... (중략) .........
void printbitfield(unsigned int a)
{
bitmemory aa;
memset(&aa, 0x00, sizeof(aa));
memcpy(&aa, &a, 4);
printf("%d", aa.bit1);
printf("%d", aa.bit2);
* 찾아보던 소스 URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/endian
코멘트 13
-
영준
12.26 18:44
-
SON
12.26 20:47
아, 그런 의도였나보군요. 감사합니다~ -
저스틴
12.26 19:29
아래 링크를 읽어보시면 자세히 이해하실수 있을겁니다.
__bitmemory 는 없어도 되는 부분이기는 하나 가독성에 도움을 줍니다.
http://shinluckyarchive.tistory.com/218
-
SON
12.26 20:48
감사합니다~ 잘 읽어보겠습니다 -
DoNotDisturb
12.26 20:22
초기 C 문법은 사용자 구조체 선언은 반드시 typedef를 써야 했습니다. 따라서 typedef struct _bitmem { ... } bitmem;으로 썼습니다. 저 말의 뜻은 struct _bitmem { ... }을 bitmem으로 type define한다는거죠. 즉 _bitmem은 type identifier가 중복되기 때문에 어쩔 수 없이 적은겁니다.
typedef의 grammar를 보면 저 구조가 나올 수 밖에 없고요.
그런데 언어가 발전하면서 사용자 함수 선언을 기초자료형과 동일하게 할수 있게 되면서 grammar가 바뀌고 새로운 문법이 추가되었습니다. C++의 클래스 선언과 동일하게 C 구조체를 선언할 수 있습니다. (컴파일 과정에서도 클래스와 구조체는 단지 기본 상속수준이 private이냐 public이냐 뿐입니다.)
그냥 typedef를 최소로 쓰고 새 문법을 쓰는게 가독성에 더 낫습니다. struct bitmem { ... };이면 됩니다. -
DoNotDisturb
12.26 20:26
노파심에 적어둡니다. VC6.0은 더 이상 사용해서는 안될 물건입니다. C99도 지원하지 않아서 위의 새 문법이 안될 수도 있고, 스코프 계산이 영 엉망진창이며, 컴파일된 바이너리의 성능이 윈도우2000에서 최적의 속도를 보장하며 XP이후로는 제대로 대응하지 못하는 등, 여러 가지 문제도 많습니다. 혹여나 학습용으로라도 VC6.0은 사용하지 마시기를 바랍니다. 변칙적 문법이 많아서 잘못하다가는 프로그래밍 감각을 영 망쳐버릴 수 있습니다. -
SON
12.26 20:50
자세한 설명 감사합니다~ -
SON
12.26 20:52
자세하고 좋은 답변을 주셔서 매우 감사합니다~
덕분에 궁금한 것 해결되면서 더 얻어가네요 -
제가 구조체 이름에 __를 붙힐때는 주로 남이 이 코드를 볼 때 "이거 내가 쓸라고 새로 정의한거니, 너무 괘념치 마쇼!! SDK에 있는거 아니오!!!" 라고 알려주기 위해서 붙힙니다. :)
C/C++로 개발을 하다보면 이런 개인적인 습관들이 하나 하나 생기는데, 이게 너무 독특하면 남들도 헷갈리기 때문에 주로 많이 써오는 방식들을 따라하게 되구요. 그렇게 하나하나 손에 배게 되면, 자연스럽게 저런 식으로 코딩을 하게 되는거죠. 그래서 많이 보던 방식을 따라 하는 것도 괜찮은 방법입니다.
-
SON
12.27 13:02
암묵적 룰 같은 것인가 보군요. 감사합니다~
-
꼬소
12.27 10:40
midday님이 말씀하신것처럼 사용도 하지만, kernel에서는 내부적으로만 쓰일 경우 앞에 '__' 많이 붙입니다.
'_' 이렇게 하나와 '__' 두개의 차이도 있는데 그건 기억이...
-
SON
12.27 13:00
저도 "_" 1개와 "__" 2개의 차이가 좀 궁금했어요
-
그 두개는 일부 에디터에서 제대로 구분이 안되서 가능하면 따로 쓰지 않으려고 해요.
typedef struct의 경우 __bitmemory 부분은 없어도 됩니다.
typedef struct {
...
}bitmemory;
보통 이런 모양인데 자료형 bitmemory와 연관 짓기 위해 습관적으로 사용한 것 같습니다.