728x90
300x250

[C++] ifstream으로 파일 존재 유무 파악


ifstream으로 파일 존재 유무를 파악하는 방법을 소개합니다.

 


1. 소스코드
 

#include <fstream>

 

 

ifstream read;

read.open("읽을 파일");

 

// 파일 존재 파악

if(!read)
{

}


 

반응형
728x90
300x250
[C++] G++로 다수 Header와 Cpp파일 처리하기(Linux)

 

Main.cpp

A.h

A.cpp(또는 inl)

B.h

B.cpp(또는 inl)

C.h

C.cpp(또는 inl)

 

이런 식으로 다수의 파일을 목적프로그램(Object)으로 출력해야합니다.

Header의 경우 컴파일하게 되면, Gch파일로 압축 컴파일됩니다.

크게 걱정하실 필요는 없으며, Main.cpp과 다수의 Cpp의 Object파일을 중점으로 컴파일하면, 이상 없이 처리됩니다.

 

다소 번거롭고 짜증 나지만, 각각의 절차를 MakeFile의 형태로 만들지 않은 이상 수작업으로 진행하셔야 합니다.

 

G++ -c Main.cpp

G++ -c A.h A.cpp

G++ -c B.h B.cpp

G++ -c C.h C.cpp

 

G++ -o Main.o A.o B.o C.o

 

만약 C의 파일이 C.cpp가 아니고 C_inc.h나 inl일 때

Gch로 파일이 생성되면 cpp파일 묶음들만 컴파일하시면 됩니다.

 

G++ -o Main.o A.o B.o
반응형
728x90
300x250
[C++] C++ Template Class 헤더 분리

 

Template Class를 헤더로 분리하는 방법은. inl 파일로 분리해서 하는 방법이 있다.
대형 3D엔진에서는. inl이란 파일 형식으로 CPP 파일 대신해서 사용한다.
사실 템플릿 함수 자체가 함수를 만들어내는 임무를 수행하고 있다.

 

일반 함수 원형의 경우,

int hama(int a, int b)

{

       a + b

}

 

이런 꼴이라고 가정하면

템플릿 자료형(int, char 등..) hama(템플릿 자료형 a, 템플릿 자료형 b)

{

     a + b;

}

 

이런 식으로 함수 원형 틀은 그대로 두되 자료형을 자유롭게 바꿔낼 수 있다.

Header라는 영역에서밖에 못 사용하는 것도 아무래도 이러한 이유가 있기 때문에 그러지 않을까 생각한다.

결론은 분리하는 방법은 편법답게 하는 방법이 있는데,
첫 번째로, header를 header 1, header 2로 분리하는 방법

 

헤더 1이에요

class 헤더1{

 

}

 

#include "헤더1.h"

 


두 번째로, header를 inl으로 맨 하단에 #include를 시키는 방법이 될 수 있다.

 

나 헤더

 

class 멍청한클래스{

 

}

 

#include "aaa.inl"

 

/// aaa.inl

구현 하시죠.ㅋㅋㅋ

 

그냥 실험하는 목적이거나 단순한 거면, 헤더 파일 하나에 몰아넣는 게 정신건강에 이롭지 않나 생각한다.

반응형
728x90
300x250
[C++] Swap 구현

int main()
{
     int num1 = 20, num2 = 30; 
     swap(&num1, &num2);
     std::cout << num1 << " " << num2 << std::endl;

     char ch1 = 'a', ch2 = 'z';
     swap(&ch1, &ch2);
     std::cout << ch1 << " " << ch2 << std::endl;

}

출력 결과
30 20
z a

Q) 위에 해당하는 함수를 구현하시오.
반응형
728x90
300x250

[C++] Hello World 만나보기

실습 환경: Visual Studio.NET 2010

#include <iostream>

int main()
{
     std::cout<<"Hello World"<<std::endl;
     std::cout<<"Hello"<<" " << "World"<<std::endl;
}

std::

std라는 라이브러리를 불러옵니다.
cout는 std에 종속되어 있는 라이브러리입니다. IE(인텔리젠스) 기반에서 자동으로 올라온다.
printf 문과 같은 역활을 수행하는 예제입니다.

반응형
728x90
300x250

[C언어] Const를 사용하는 이유

상수를 사용하는 이유에 대해서 짧게 적어봤습니다.

1. C++에서 처음 등장
-> C언어 표준을 재정립하는 과정에서 C언어에도 포함됨.

수치가 변하면 안되는 값들
예) PI = 3.14(이하 소수점 생략하고 3.14만 고정진리로서 계산해야할 때)

반응형
728x90
300x250

[C언어] 포인터의 상수화 const

이 글은 소개하는 글은 아니고, 편안하게 생각을 정리해보기 위해서 작성하였습니다.


가정 1 : const int ……(포인터 생략)

문제 1 : const int는 무슨 변화를 일으키는 것 일까?
-> 결과 : 주소 변경만 허용

의문점이 생길 수 있는 가정 조건)
* const int * 꼴인데, int const * 꼴로 하면 어떻게 처리 될 것인가?

가정 2 : int * const ……(포인터 생략)
-> 결과 : 상수로서 처리만 가능.

반응형
728x90
300x250

[C언어] C언어 널포인터를 활용한 출력 결과

ptr이 예를 들어 x0000 주소라고 한다면, ptr의 값을 1증가 시킬 때 그 다음 번지는 무엇일까?


 #include <stdio.h>

 int main()
 {

int *ptr1 = 0;
char *ptr2 = 0;
double *ptr3 = 0;

printf("%d, %d, %d \n", ptr1++, ptr2++, ptr3++);
printf("%d, %d, %d \n", ptr1, ptr2, ptr3);

return 0;

 }
 

출력 : 0, 0, 0
         4, 1, 8


'포인터 연산에 따른 실질적인 값의 변화는 포인터 타입에 따라 다르다'는 결과를 알 수 있다.
int형 변수는 4바이트이다.
int *타입의 포인터 변수 값을 하나 증가시키면 4가 증가한다.
char형 변수는 1바이트이다.
char *타입의 포인터 변수 값을 하나 증가시키면 1이 증가한다.

즉,
x0001의 주소의 다음을 가르키는 주소는 x0004 이다.

반응형

+ Recent posts