jun-wiki

View My GitHub Profile

Posts (Latest 10 updated) :
Read all
Contents:
  1. C가 왜 필요한가?
    1. C에서 주의 할점
      1. = vs ==
      2. & vs &&, | vs ||
      3. 주석
      4. 연산자 우선 순위
      5. 세미콜론 실수
      6. switch의 break
      7. Dangling else 문제
      8. 외부 변수 타입 불일치
      9. 평가 순서 불명확
      10. 포인터 배열
      11. NULL 포인터
      12. 매크로와 부작용
      13. 이식성 문제 (EOF 처리)
      14. C 포인터


C에는 함정이 많아 발조심해야 한다


오늘은 이를 피하기 위한 특강을 들었다


C는 양날의 검이라 한다…

근데 생각해보니 검은 원래 양날 아닌가?

좀 이상한 격언같다;;

날이 하나면 검(劍)이 아닌 도(刀)라 하니 말이다

살짝 어둠의 다크니스? 그런 느낌으로 쓰는건가?


int, C에서는 16 비트에서 2byte, 32/64 비트에서 4byte다

Python에서는 int가 고정크기가 아니라 10byte 넘는다;;

왜냐면 차피 직접 포팅하려 쓰는게 아니라서 말이다

최적화 신경 안쓰니 말이다

반면에 C는 직접 최적화를 위해 여러 타입을 사용한다

좀 거지 같긴 하지만 상황에 맞는 무기 쓰는 거 같아 묘한 쾌감이 있다 ㅇㅇ


C가 왜 필요한가?

C에서 주의 할점

= vs ==

=는 대입 연산자이고, ==는 비교 연산자다

뭐, 당연한 사실이고 지켜야 하지만…

파이썬과 달리 C발 C는 조용히 버그내서 주의해야한다


대입문이 아닌 대입 연산자라서 식으로 취급해서 그냥 대입으로써 동작한다

==는 같으면 1, 다르면 0을 반환하는 식인데

=는 저장하고 그 값을 결과로 내버리니 어지간하면 전부 통과해버린다

C에서의 if문은 0이면 False고 이외에는 True 취급한다


& vs &&, | vs ||

&|은 비트 연산자고,

&&||은 논리 연산자다

당연히 둘 섞어서도 조용히 진행하기에

틀린 그림 ㅅㅂ 찾기 해야 한다


주석

int y = x/*p;

*p로 나누겠다는 원대한 꿈은

주석처리 될 수 있다…

y = x / (*p);

띄워쓰기만 해도 되지만 괜히 깝죽거리지 말고 괄호까지 친절하게 씌워주자

포인터 벗겨놓는 취미 없다면 말이다


싱글 쿼터 더블 쿼터

', " C언어에서는 이 두개 섞어쓰면 안된다

ㅅㅂ 파이썬은 둘 다 상관없었는데


연산자 우선 순위

C이 미친새끼는 15단계의 연산자 우선순위가 있단다;;

그러니 괄호를 잘 씌워주자 ㅇㅇ

코드 벗기기 그만해야겠다


세미콜론 실수

문장을 끝낼때 ; 세미콜론 붙여주기

이건 ㅇㅈ

if문 같은 코드 블럭에 세미 콜론 붙여버리면

시작하자마자 끝나고 다음 문장으로 넘어가 버린다


switch의 break

switch문? 에서 break 생략하지 말라고 한다

없으면 다음 case로 넘어간다는데…

ㅅㅂ switch문이 뭔지 모른다;;


알아보니 대충 if문 변종 느낌인듯 싶다


Dangling else 문제

뭔 세계 7대 난제 같은 제목이지만

ifelse문 쓸 때에 중괄호 잘 쳐줘야 한다는거다

else는 가까운 if문으로 붙는 특성이 있으니 말이다…

이쯤되면 코드 옷입히기 언어가 아닌가 싶다

바로 if, else에 바니ㄱ


외부 변수 타입 불일치

Skip~


평가 순서 불명확

while (i < 3)
    y[i] = x[i++]

이따구로 해놓으면 어지러워진다

왼쪽하고 오른쪽 중 뭐가 먼저 읽히는지 알 수 없으니…

for (i=0; i < 3; i++)
    y[i] = x[i];

이런식으로 하란다

이거 ㄹㅇ 나도 겪어봤다


포인터 배열

Skip~ 다음주에 처맞을테니 겪어보란다 ㅇㅇ

(포인터는 메모리 가리키기만 해 사용전에 메모리 할당 필수라 한다 소곤소곤)


NULL 포인터

NULL 포인터는 아무것도 가리키지 않으니…

역참조하면 걍 꺼져버린다


매크로와 부작용

매크로가 뭔지 모른다

대충 define해서 간략하게 함수 만드는 느낌 같다

아무튼 macro 여러번 불려지고 하면

++, 함수 호출 등이 여러번 불려져

중복 발생 해버려 본래 의도와 바뀌어 버린다


이식성 문제 (EOF 처리)

Skip~


C 포인터

좀 방대해서 각자 공부하란다

포인터 주소로 여러가지 연산하면서 크기 알아내거나 컴퓨터 자원 줄이는 법 등이 있다 설명했다

정확히는 잘 모르겠다

그리고 다중 포인터 같은거 쓰지 말랜다

3중 포인터 쯤 가면 문제가 있을 확률 높다고 말이다

내 4중 나생문이…