728x90
728x90

Programming Language/C,C++ 52

C언어] 시퀀스 포인트와 연산에 대한 이해

&& 연산자 앞 모든 식의 계산 완료. 첫번째 식에 따라 두번째 식은 평가하지 않을 수 있음. || 연산자 앞 모든 식의 계산 완료. 첫번째 식에 따라 두번째 식은 평가하지 않을 수 있음. , 연산자 앞 모든 식의 계산 완료. () 함수 호출 직전까지 모든 식의 계산 완료. ? 조건 판단 전 모든 식의 계산 완료. ; 직전의 모든 식의 계산 완료. if(), switch() 연결된 코드가 실행되기 전 모든 식의 계산 완료. while(), do-while() 반복될 코드가 실행되기 직전 모든 식의 계산 완료. for(;;) 각 세미콜론 직전에 모든 식의 계산이 완료. return 값 반환 전 모든 식의 계산이 완료. 흔히 시퀀스 포인트에만 초점을 두고 있어서 간과하고 넘어가는 부분이지만, 어느 특정 시점..

C++ assert() 함수의 용도와 사용 시 참고사항

void assert(int expression) 조건문이 false면 프로그램을 종료시켜버리며 디버깅에 사용하는 함수.assert.h에 정의된 매크로 함수로 이를 인클루드하여 사용.assert의 조건문에서 문제가 발생해서 에러가 발생하면 메세지 박스에 어떤 파일의 어떤 라인에서 문제가 발생했는지 적혀 있어 쉽게 문제가 되는 부분을 찾아낼 수 있음.assert를 통해 메세지를 받았을 경우, 메세지 박스에서다시 시도 버튼을 누르고 중단 시점의 콜 스택이나 변수 상태를 확인해 원인을 확인할 수 있음. assert를 이용하는 이유어떤 에러를 유발할 수 있는 작업이 진행되고 에러가 한참 뒤에서나 발생해서 프로그램에 문제를 일으키면 에러를 유발한 실제 작업을 찾기가 어려워짐. 이런 골치 아픈 일을 방지하기 위해서..

명품 C++ 프로그래밍 10장 실숩문제 - 3

개인적으로 C++을 공부할 때 작성해놓았던 코드들 올린다.혼자 책을 사서 독학하고 그리고 학부생 시절에 복습하면서 했던 문제들이라서어떤 문제들은 깔끔히 잘 정리되어 있고, 어떤 문제들은 허접한 버그가 있을 수도 있다.확인은 해뒀지만, 확인하지 못하거나 고려해야 할 버그, 오탈자 등은 댓글을 남겨주시라. 그간 공부한 것들을 정리하는 블로그이기 때문에 올려놓는다. 지금까지는 실습문제 문제 내용까지 적었지만, 귀찮기도 하고, 굳이 입력할 필요성은 느끼지 않아서 적지 않았다. 차후 게시물을 대대적으로 수정할 때면 추가될지도 모른다. 실습문제 13. #include #include #include #include using namespace std; class Circle { private: string name..

명품 C++ 프로그래밍 10장 실습문제 - 2

개인적으로 C++을 공부할 때 작성해놓았던 코드들 올린다.혼자 책을 사서 독학하고 그리고 학부생 시절에 복습하면서 했던 문제들이라서어떤 문제들은 깔끔히 잘 정리되어 있고, 어떤 문제들은 허접한 버그가 있을 수도 있다.확인은 해뒀지만, 확인하지 못하거나 고려해야 할 버그, 오탈자 등은 댓글을 남겨주시라. 그간 공부한 것들을 정리하는 블로그이기 때문에 올려놓는다. 지금까지는 실습문제 문제 내용까지 적었지만, 귀찮기도 하고, 굳이 입력할 필요성은 느끼지 않아서 적지 않았다. 차후 게시물을 대대적으로 수정할 때면 추가될지도 모른다. 실습문제 7. #include using namespace std; class Circle { private: int radius; public: Circle() { this->ra..

C++] 명품 C++ 프로그래밍 10장 실습문제 - 1

개인적으로 C++을 공부할 때 작성해놓았던 코드들 올린다.혼자 책을 사서 독학하고 그리고 학부생 시절에 복습하면서 했던 문제들이라서어떤 문제들은 깔끔히 잘 정리되어 있고, 어떤 문제들은 허접한 버그가 있을 수도 있다.확인은 해뒀지만, 확인하지 못하거나 고려해야 할 버그, 오탈자 등은 댓글을 남겨주시라. 그간 공부한 것들을 정리하는 블로그이기 때문에 올려놓는다. 지금까지는 실습문제 문제 내용까지 적었지만, 귀찮기도 하고, 굳이 입력할 필요성은 느끼지 않아서 적지 않았다. 차후 게시물을 대대적으로 수정할 때면 추가될지도 모른다. 실습문제 1. #include using namespace std; template T biggest(T arr[], int size) { T max = arr[0]; for (in..

C] 공용체(Union) 간단 정리

공용체(Union)는 기본적으로 구조체와 같은 선언 문법과 사용법이 동일한데, 가장 큰 차이점은 구조체 내의 멤버 변수들은 각자에게 할당된 메모리가 있으며 서로의 공유하지 않는데, 공용체는 멤버 변수 중 가장 큰 자료형의 공간을 공유하는 특성을 가지고 있음. 공용체를 선언할 때는 union 키워드를 사용. union {int i;short s[2];} u; 위 공용체의 크기를 sizeof()를 이용해 확인하면 4가 반환된다. 가장 큰 자료형이 int형이고 int형은 4바이트를 차지하기 때문이다. 만약 공용체 u가 구조체였다면 sizeof()를 통해 구조체 크기를 확인하면 4+2*2=8로 나왔을 것이다. 공용체는 기본적으로 공용체의 선두 번지와 같은 공간에 배치되어서 i의 번지와 s의 번지가 동일하게 된다..

C++ 캐스트 연산자(Cast Operator)

C언어에서의 캐스트 연산자는 아주 간단했다. int a=10;double d;d=(double)a; 이러한 코드의 장점은 사용자가 원하는대로 변수 타입을 변경할 수 있어서 편리하고 코드를 유연하게 짤 수 있고 void* 같은 타입 때문에 필연적으로 사용해야 할 때 사용할 수 있다는 점이다.변환 가능성을 막론하고 작성한 코드 그대로 돌아가기 때문에, 그 자유로움이 프로그램의 안전성을 위협한다. C++에서는 이러한 캐스트 연산자의 단점을 보완하고자 네 가지의 캐스트 연산자를 도입했다. static_castdynamic_castconst_castreinterpret_cast cast_operator (var) static_cast강제 변환이 아닌 논리적으로 변환이 가능한 타입에 대해서 캐스팅 실시함.일반적으로..

비트맵(bmp) 구조체 구조

typedef struct BITMAPFILEHEADER // 비트맵 파일 헤더 구조체{unsigned short bfType; // BMP 파일 매직넘버unsigned int bfSize; // 파일 사이즈unsigned short bfReserved1; // 예약, 0unsigned short bfReserved2; // 예약unsigned int bfOffBits; // 비트맵 데이터 시작 위치} BITMAPFILEHEADER; typedef struct BITMAPINFOHEADER // 비트맵 정보 헤더 구조체{unsigned int bfSize; // 현재 구조체 사이즈int biWidth; // 이미지 가로int biHeight; // 이미지 세로unsigned short biPlanes; ..

함수 오버로딩과 디폴트 매개변수가 만드는 모호성

함수 오버로딩(Function Overloading) 함수 다중 정의라고도 하며 아래 조건을 만족시킬 때 함수가 오버로딩 되었다고 말한다. 1. 함수명은 동일해야 하며 반환형은 동일해도 되고 동일하지 않아도 된다.2. 매개 변수의 수가 다를 때3. 매개 변수의 수는 같은데 자료형이 다를 때 ex)void Foo(int a);void Foo(int a, int b); 디폴트 매개 변수(Default Parameter)함수의 매개 변수 값을 미리 지정해두는 방법으로, 선언 시점에 이를 작성한다. 함수를 호출할 때 실인수는 좌에서 우로 적용되기 때문에 디폴트 매개 변수는 오른쪽에서 왼쪽 방향으로 지정해야 한다. ex)void foo(int a, int b=10);foo(2); // a=2, b=10foo(3,..

C] fopen, freopen, fdopen를 사용하는 파일 접근 정리

아무래도 C/C++에서 파일 입출력을 사용했던 게 정보올림피아드 대회 문제 풀 때가 마지막이었던 것 같다. 그 당시에는 C++의 fstream이 더 편해서 그걸 이용했고, C를 사용할 때만 반 강제적으로 C의 fopen을 사용하곤 했는데 freopen을 알고 나니까 freopen과 fopen, 덤으로 fdopen에 대해서 조금 더 알고 싶어졌다. freopen은 온라인 저지를 이용한 알고리즘 문제를 풀 때 많이 사용한다. 입력할 데이터가 많으면, 하나하나 치는 것이 다 일이기 때문. 이 때는 입력 데이터를 파일로 만들어서 freopen으로 스트림을 변경시켜주기만 하면 scanf나 printf를 변경하지 않고도 파일입출력을 사용할 수 있어 편리하다.(물론 어지간한 크기의 데이터가 아니면 직접 치는 편이다...

728x90