반응형

프로그래밍 215

분할컴파일 하는법(gcc) c언어

리눅스환경을 사용하거나 Mingw을 사용할 때 툴을 사용하지 않고 직접 분할 컴파일을 하는 방법입니다. 가장 간단한 예제입니다. 세개의 파일은 같은 디렉토리에 만들어 줍니다. 메인이되는 test.c파일과 모듈이되는 myfun.c 파일 그리고 myfun모듈의 존재를 알려주는 myfun.h 헤더파일입니다. test.c에 헤더 선언 #include 를 하고 이 파일이 있는 디렉토리에서 명령어 프롬프트를 열어줍니다. 물론 윈도우 환경변수에 gcc컴파일의 위치를 넣어주셔야합니다. 2013/11/28 - [프로그래밍/c++] - MinGw을 사용해보자 명령어 프롬프트에서 위와 같이 컴파일을 해줍니다. -o 옵션은 실행파일의 이름을 지정합니다. -g 옵션은 컴파일후 링크까지 합니다.(실행파일 만듬) -c 목적파일까지..

C언어 좌변값[팁]

컴파일을 하다보면 lvalue require~ 어쩌구 하는 에러를 보게된다. 무심코 넘어갈 수 있는데 lvalue에 대해서 관찰해보자. 어떤 글에서 보니 사람마다 코딩에 흔적을 남긴다고 한다. 구두점의 위치나 공백습관, 주석형태 등등 많을 것이다. 말하고자 하는 바가 프로그래밍 언어와 사람 말하는 언어습관을 비교하는 것인지 모르겠지만, 코딩을 할때 실제 말하는 것처럼, 습관적으로 하는 코딩습관이 있을 지 모른다. 문법이 확실하지 않아도, 그렇게 말해도, 또는 그렇게 코딩해도 별 문제없이 사용했을 지도 모른다. 실제 언어야 어떻게든 의미만 전달하면 되겠지만, 프로그래밍 언어는 작은 실수라도 에러기때문에 문법에 대해서 끝임없이 숙지하고 생각해야 한다 생각한다. lvalue라는 건 좌변값이라고 말한다. 그럼 ..

상수포인터, 포인터상수, const

상수포인터와 포인터상수의 차이 포인터와 배열을 배우다 보면 상수포인터와 포인터상수라는 용어를 많이 듣게 됩니다. 단어만 생각하면 순서만 바뀐 용어인데 뜻은 어떤지 알아볼까합니다. /* 2014 9/19 추가부분 영어로 관련표현은 constant pointer - 포인터의 값이 상수인 포인터 pointer to constant - 상수를 가리키는 포인터 constant pointer to constant -상수를 가리키는 constant pointer 3가지입니다. 제가 여러책을 본 결과 한국어 번역으로 ,포인터상수와, 상수포인터는 번역상의 차이지 결국은 같은 의미로 혼용되고 있다고 생각이듭니다.어떤 책에서는 배열변수명이 포인터 상수라고하고 어떤 책에서는 상수포인터라고합니다. 어떤 책에서는 이에 대한 언급..

C언어 포인터에 대한 이해(3)

포인터 연산 c언어 포인터에 대한 이해 3번째 포스팅 이네요. 포인터란 녀석은 참 단순하지만, 완벽히 이해하지 못하면 골머리 썩는 녀석입니다. 그만큼 c언어에 있어서 포인터란 녀석은 자주 쓰이기 때문이죠. 간혹 포인터를 안쓰고 프로그래밍을 한다는 분도 계시지만, 포인터를 안쓰는건 물감없이 수채화를 그리는 것과 다름없다 생각듭니다. '그럼 이렇게 골머리썩는 포인터를 왜 써야하나요?' 이렇게 질문 하시겠죠? 저는 왜 써야하는지 보단, 포인터가 없다면 많을 것들을 할 수 없기 때문이라 생각됩니다. 물론 포인터말고 좀 더 쉬운 개념의 어떤 문법이 생길지도 모르겠지만, 지금으로서는 포인터로 인해 많은 것들을 할 수 있고, 그런 것들을 경험으로써 익혀 나가게 된다면 포인터는 정말 필요하구나 라고 차차 느껴나가실 겁..

C언어 포인터에 대한 이해(2)

저번 포스팅에 이어 포인터에 대해 쓰려합니다. 저번 포스팅은 포인터의 가장 기본이 되는 사항을 체크해 봤습니다. 이번 포스팅은 주제를 좀 더 세분화하여 심화해 보겠습니다. 포인터의 타입의 의미 2013/11/28 - [프로그래밍/C언어] - C언어 포인터에 대한 이해(1) 에서 타입이 왜 필요한지 스치 듯 설명했습니다. 포인터의 타입은 포인터가 가리키는 대상체의 타입입니다. 간단하게 예를 들어 보겠습니다. p포인터는 arr배열을 가리키기 위해서 int형으로 선언되어 있습니다. 배열을 잘 모르시는 분을위해 간략한 설명을 하겠습니다. 참고 : 2013/05/25 - [프로그래밍/C언어] - 배열의 특징 C언어 arr[10] 에서 arr은 배열명으로서 arr[0]의 주소값을 의미하고, 배열 전체를 대표하는 배..

디폴트 복사 생성자(얕은복사,깊은복사)

디폴트 복사 생성자(얕은복사,깊은복사), gcc 4.8.1 버전 과연 얕은 복사가 되는걸까? 먼저 문제를 발견하기 위해서 얕은복사가 되는지 코드를 먼저 짜보았다. 참고는 예전에 듣던 유명한 c++강의의 소스를 참조를 했다. 오래전 강의라 그런가? deprecated 경고가 난다. 2014/01/10 - [프로그래밍/c++] - deprecated conversion from string constant to 'char*' 이경우 char * 를 const char *로 바꿔주면 된다. 아래처럼.. 전부다바꾸면 안되고 밑줄 친 부분만 바꿔준다. 그럼 아래처럼 성공적으로 컴파일된다. 그럼 과연 얕은 복사가 되었나? 아무런 조치도 취하지 않았는데 깊은 복사가 되었다. 새로운 컴파일러의 승리인가? 주소값을 체크..

프로그래밍/cpp 2014.01.10

deprecated conversion from string constant to 'char*'

deprecated conversion from string constant to 'char*' 은 에러가 아닌 경고지만, 해결하지 않는다면, 나중에 문제가 될 소지가 있습니다. 이 경고는 컴파일러를 최신으로 바꾼 후 뜰 수가 있습니다. 그러면 우선 경고를 만들어보겠습니다. 기존엔 이런 표현으로 쓰곤 했습니다. 문제가 있는 표현이지만, 컴파일상에서 에러가 나지 않았었습니다. 형식이 바뀌었습니다. 위 같은 표현으로 쓰기위해선 다음과 같이 써야합니다. 아래는 같은 표현입니다.(기존에 쓰던 방법) const char *c 라는 표현자체가 문자상수라는 표현인데, 확실히const를 명시하는 표현이 정확하다고 생각드네요. 표현은 확실해졌네요. 아니면 string 클래스를 사용해서 객체를 생성하여 사용하는 방법이 있..

가상함수(2)

가상함수(함수내 함수호출,함수내 가상함수호출),함수 전달인자 이번 포스팅은 가상함수의 동작을 조금 더 깊게 들어가보기로 하겠다. 2014/01/04 - [프로그래밍/c++] - 가상함수(virtual),vptr,vtable C++ 2013/06/04 - [프로그래밍/c++] - 가상함수 virtual 키워드 C++ 전시간에는 가상함수 테이블에 관련하여 내부적으로 가상함수가 어떻게 동작하는지 살펴보았다. 유연한 프로그래밍을 위해서는 이런 내부적인 동작을 머리속에 넣어 두고 있으면 많은 도움이 된다. 이번시간또한 내부적인 동작을 다뤄볼 텐데, 클래스내부의 함수로 (가상)함수를 호출하는 경우를 다뤄볼 것이다. 함수의 상속과 호출이 어떤식으로 이뤄나는지에대해서 살짝 깊게 들어가려한다. 사실 함수의 상속은 단순히..

프로그래밍/cpp 2014.01.07

가상함수(virtual),vptr,vtable C++

가상함수 그리고 vptr,vtable 가상함수란 클래스 타입의 포인터로 멤버함수를 호출할 경우 동작하는 함수를 말하는데 함수의 선언앞에 virtual 키워드가붙은 함수를 말합니다. 가상함수라는 언어적인 측면으로 이해하기에는 다소 무리가 있기때문에 가상함수란 뜻의 의미보다는 가상함수란 무엇인가를 알아야 하겠습니다. 관련링크 2013/06/04 - [프로그래밍/c++] - 가상함수 virtual 키워드 C++ 위 관련링크에 가상함수에 대한 기본적인 설명이 있습니다. 이번 포스팅은 vtable에 대해서 이야기를 해볼까합니다. vtable을 설명하기에 앞서 정적결합과 동적결합에 대해서 알아야하셔야하는데요. 위 링크에선 간략하게 설명했습니다. 정적바인딩은 클래스타입의 포인터에 따른 결합이고 동적바인딩은 클래스타입..

프로그래밍/cpp 2014.01.04

함수포인터(1)

일반적으로말하는 변수포인터의 개념을 어느정도 파악했다면, 함수포인터 또한 같은 맥락으로 이해하면 어렵지 않다. 2013/11/28 - [프로그래밍/C언어] - C언어 포인터에 대한 이해(1) 함수명은 함수의 시작번지를 나타내는 포인터역할을 한다. 여기서 func는 포인터인 것이다. 우리는 func라는 함수명과 동등한 포인터를 선언을 할 것이고 그것이 pf 이다. *구두점을 통해 pf라는 포인터 변수를 선언하였고, pf의 타입은 위 선언처럼 반환값이 int이고, 두개의 int인수를 가지는 함수타입이 된다. 느낌이오면 함수포인터의 선언도 일반적이 변수포인터의 선언과 다르지 않다는걸 알 수 있다. 타입을 명시하고 포인터 선언을 한 것이다. 이중포인터를 선언하고싶다면 구두점**를 붙이면되고, 배열을 선언하고싶다..

프로그래밍/cpp 2014.01.02
반응형