C

 라이브러리 파일을 이용하여 실행파일을 만들 때 컴파일러의 옵션을 이용하는 방법이 있다. 이때 사용되는 옵션이 ‘-L’과 ‘-l’ 인데, -L 의 경우에는 사용하고자 하는 라이브러리가 포함된 디렉토리 명을 명시하는 옵션이고, -l 은 라이브러리의 이름을 적어주는 옵션이다. 이때 라이브러리의 이름은 lib 라는 말과 확장자 ‘.a’ 를 생략하여 사용할 수 있다. 즉, libMsg.a 의 경우 그냥 Msg 라고 쓰면 [...]

Continue reading about GCC 컴파일러에서 라이브러리 파일을 사용하는 법

 유닉스 상에서 GCC 컴파일러를 이용하여 라이브러리를 만들려면 먼저 다음과 같이 컴파일 과정을 통해 오브젝트 파일을 만들도록 한다.  % C++ -c Message.cpp  컴파일이 제대로 끝났으면 확장자로 ‘o’를 가진 Message.o 파일이 생성될 것이다. 이번에는 생성된 오브젝트 파일을 이용하여 라이브러리를 만들도록 한다. 이때 사용하는 명령어는 ar로 라이브러리 작성에 사용된다. 아래와 같이 ar 명령어와 옵션 그리고 생성하고자 하는 라이브러리의 [...]

Continue reading about GCC 컴파일러를 이용한 라이브러리 생성

pchero on 8월 8th, 2010

 메모리상에 있는 객체에 접근할 길이 없어졌을 때 객체는 생명을 다했다고 말할 수 있다. 접근할 길을 잃은 객체는 어떤 방법으로든 메모리를 실행환경에 되돌려줘야 한다. 객체의 소멸에서 한 가지 주의해야 할 점은 객체는 자기의 스코프가 끝나게 되면 소멸된다는 점이다. 다시 말해, 그 객체가 사용되는 범위를 넘어가게 되면 객체의 사용주기가 끝나게 된다는 것이다. 아래의 예제를 보도록 하자. class [...]

Continue reading about 객체의 스코프

pchero on 8월 8th, 2010

 헤더파일을 보면 다음과 같이 #ifndef와 #endif가 나온다. 이는 3-1.h 헤더파일을 다른 소스파일이 여러 번 include 했을 때 발생하는 문제를 미연에 방지하기 위해서이다. #ifndef __3_1_h__#define __3_1_h__… … …#endif /* ifndef __3_1_h__ */  예를 들어, 3-1.h 헤더파일을 include한 또 다른 헤더파일인 3-2.h 파일이 존재하는데, 3-2.cpp 파일에서 다음과 같이 include 했다고 하자. #include “3-1.h”#include “3-2.h”  이와 같이 했을 [...]

Continue reading about 헤더파일 속의 #ifndef와 #endif 선언

 출력 스트링 스트림에서도 put 메소드를 이용하여 버퍼에 하나의 문자식 입력할 수 있다. 간단한 예를 보면 다음과 같다. #include <strstrea>/* 우분투 10.04, g++-4.3.3 버전에서는 다음의 헤더파일을 사용하도록 한다. * #include <iostream> * #include <backward/strstream>*/ using namespace std; void main(void){  ostrstream intStream;  char intData = ’0′;   // 1~10 까지 숫자와 공백을 버퍼에 출력  for(int count = 0; count [...]

Continue reading about 한 문자씩 버퍼에 출력하는 put 메소드

pchero on 8월 8th, 2010

 cin 이 제공하는 메소드 중 하나의 문자를 입력받는 get 메소드가 존재하는 것처럼 cout에는 하나의 문자를 출력하는 put 메소드가 존재한다. put 메소드의 사용에는 제약이 따르게 되는데, 이는 put 메소드에서 사용 가능한 파라미터는 단지 하나의 문자(character)뿐이라는 것이다.  물론 숫자를 넘길 수도 있는데, 이 또한 내부에서 문자로 변환하여 화면에 출력하게 된다. 예를 들어 다음을 실행시켜 보자. int letter [...]

Continue reading about 출력 스트림에서 한문자씩 출력하기.

pchero on 5월 17th, 2010

 C++ 프로그래밍을 공부하던 중, 예제 프로그램을 컴파일하다 다음과 같은 에러를 발견했다.  Description    Resource    Path    Location    Type‘nocreat’ is not a member of ‘std::ios’    Config.cpp    /TEMS/src    line 40    C/C++ Problem  환경은 이클립스 3.5.2 버전이었으며, g++ 버전은 version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) 이었다.  문제의 원인을 찾기 위해 구글링을 해보니 답은 간단했다. [...]

Continue reading about ios::nocreate

 윈도우에서 네트워크 프로그램 소스를 컴파일 하던 중 이상한 warning 을 발견하였다. C:\Documents and Settings\Owner\My Documents\Network\helloworld_client_win\helloworld_client_win.c(34) : warning C4761: integral size mismatch in argument; conversion supplied 문제의 소스 부분은 다음이었다. servAddr.sin_port = htons(atoi(argv[2])); 보기에는 문제가 없는 부분이다. 정상작동하는 소스였다.(..리눅스에서 확인)  물론 warning 을 무시하고 링크를 하여도 문제없이 프로그램을 잘 실행되었다.  그렇다면 무엇이 문제일까….먼저 C4761 에 관한 내용을 찾아 [...]

Continue reading about 윈도우 네트워크 프로그래밍 중 발생한 warning C4761

 네트워크 프로그래밍을 하더도중…한가지 풀리지 않는 의문점이 생겨 KLDP 게시판에 글을 올렸다.  내용 보기 : http://kldp.org/node/90394  글을 올린지 30분도 채 안되서 답변이 올라왔다.  문제인즉…  다음과 같은 코드를 실행했을때…  (Language : c) #include #include #include #include #include   void error_handling(char *message);   int main(void) {     int fildes;     FILE *fp;       fildes [...]

Continue reading about 파일 디스크립터와 파일 포인터 사용시 주의점

 scanf 로 문자열을 받고 나면 공백으로 구분되서 남은 문자들이 아직 버퍼에 남아 있기 때문에… fflush(stdin); 을 해줌으로써 버퍼를 비워주는 프로그래밍 기법이 있다.  하지만 이것은 엄밀히 말하면 틀린것이다. 더 정확히 이야기하자면 VC 에서만(아마도..) 된다.  사용자들의 편의를 위해 VC에서 확장의 개념으로 만든것이라 생각하면 이해가 쉬울 것이다.  그렇다면 왜 이것이 안되는 것일까? C FAQ 12.26을 보면 다음과 같은 [...]

Continue reading about 리눅스(Unix)에서 fflush(stdin) 사용시 발생하는 문제점.