본문 바로가기

프로그래밍/C || CPP26

c언어 범위 별 변수 차이를 알아보자 (identifier scope) c언어를 하다보면, 분명히 위에서 num이라는 변수의 값은 5였는데, 어떤 부분에서는 값이 달라져서 프로그램이 꼬이는 경우가 생기는 경우가 있습니다. 보통, 이러한 경우는 같은 변수명을 사용할 경우에 종종 발생합니다. 하지만, 어떤 경우에는 같은 변수명을 써도 값이 달라지지 않는 경우도 있습니다. 그 이유는 c언어는 범위에 따라 같은 변수를 사용해도 다르게 인식하도록 설계되어 있기 때문입니다. 이번 포스팅은 범위 별로 변수를 어떻게 사용하는 지에 따라 같은 변수명을 사용해도 다르게 인식하는 케이스를 정리하려고 합니다. c언어의 범위(Scope) 서론에서 말했듯이, c언어는 범위(scope) 안에서 같은 변수명이라도, 다른 변수로 인식하도록 설계되어 있습니다. 크게, c언어는 4가지 정도의 범위 종류로 나.. 2019. 7. 17.
[C/C++] unsigned char 타입에 음수를 넣은 값이 signed short, int로 형변환 하면 이상한 값으로 변하는 이유 혹시, 프로그래밍을 하다가 분명히 unsigned char 타입에 음수를 넣었는 데, signed short이나 int로 형변환하니 이상한 값으로 변하는 경우를 경험하신 적이 있으신가요? 혹은 signed에서 unsigned로 넣었을 경우는 있으신가요? 이미 경험이 있으시다면 그 이유도 아시고, 이후 프로그래밍에서는 조심하려고 하실 것으로 생각합니다. 이 문제는 프로그램이 복잡하다면, 생각보다 찾기 힘들 수도 있기 때문에 코드를 짤 때 주의해야 하는 부분이라고 생각합니다. 그래서 이번 포스팅으로 정리해놓으려고 합니다. 또한, 이게 무슨 문제를 일으킬 지 모르시는 분들을 위해서도 글을 씁니다. 그럼, 바로 설명으로 들어가도록 하겠습니다. 들어가기 전에.. 포스팅을 위해 작성한 예제에 대해서 간단하게 typ.. 2019. 7. 6.
부모와 자식클래스 가상 함수의 반환타입을 다르게 재정의 할 수 있을까? (Overriding, Return Value) 가상 함수 코드를 보다가, 우연히 부모클래스의 가상 함수와 자식클래스의 가상 함수의 리턴 타입이 다르다는 것을 본 적이 있습니다. 혹시, 부모 클래스에서 상속 받은 가상 함수의 리턴 값이 달라도 상관 없다는 것을 아시나요? 물론, 이 포스팅을 검색해서 들어오셨다면, 그 사실을 모르셨거나, 정확한 이유가 궁금해서겠죠. 먼저, 답부터 말하면 가능합니다. 그런데, 일반적으로 오버라이딩을 공부하신 분이라면 반환 타입이 같아야 한다는 것은 모두 아는 사실인데, 그럼 불가능한 것이 아닌가라고 생각하실 수 있습니다. 그래서 열심히 구글링해본 결과, 부모 클래스의 함수 타입에 대해서 상속받은 클래스의 함수가 대체가능하다면 반환타입이 달라도 된다고 합니다. 말로만 설명하면 이해하기 어려우므로, 바로 간단한 예제로 설명하.. 2019. 6. 27.
C++ virtual, override, final 키워드별 사용하는 이유를 알아보자. C++을 입문하시면서, 상속에 관해서 공부를 하셨을 거에요. 이때, 나오는 키워드가 virtual 입니다. 때문에, virtual 이라는 키워드는 꽤나 눈에 익으셨을텐데요. 혹시, override와 final도 오버라이딩에서 사용하는 키워드라는 것을 아시나요? 사실, override와 final은 C++11 이후에 등장합니다. 때문에, 못 보셨을 수도 있습니다. 하지만, 새롭게 추가된만큼 어딘가에 사용하면 유용하다는 뜻이겠죠? 이번 포스팅에서는 virtual, override, final 키워드가 각각 어떠한 경우에 사용하는 지에 대해서 정리하도록 하겠습니다. 일단, 각 키워드가 무엇을 뜻하는 지 알아보자. 위에서 말한 것처럼, virtual, override, final은 모두 상속 관련 오버라이딩을 .. 2019. 6. 18.