728x90

C언어 34

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

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

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강제 변환이 아닌 논리적으로 변환이 가능한 타입에 대해서 캐스팅 실시함.일반적으로..

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

함수 오버로딩(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,..

DataStructure] C언어로 쉽게 풀어쓴 자료구조 3장 - 1

1. C언어에서 배열에 대하여 다음 중 맞는 것은?답 : (2) 배열의 이름은 포인터와 같은 역할을 한다. 오답노트(1) 3차원 그 이상의 배열도 가능하다.(3) 배열의 인덱스는 0에서 시작한다.(4) 선언한 다음, 실행 도중에 크기를 변경하는 것은 불가능하다. 2. 다음 중 배열에 관한 문장 중 문법에 맞지 않는 것은?답 : (4) char *pb[30]="I am a student"; 해당 배열은 2차원 배열인데, 1차원 배열 초기화 방식을 사용하여 문제가 생긴 것. 3. float a[100]으로 선언되 배열의 시작 주소를 1000번지라고 할 때, 배열의 10번째 요소의 주소는 몇 번지인가?답 : (4) 1040번지 1000+4*10 4. 구조체에 관한 내용 중 틀린 것은?답 : (2) 구조체 변수..

C, C++] 매크로 정의, 해제

매크로 정의하는 방법은 알고 있었는데 해제하는 방법은 모르고 있었다.정의는 알고 있다시피 전처리기에서 #define을 이용해서 매크로를 정의해 사용하면 된다.이미 정의된 매크로를 이용해서 새로운 매크로 이름을 정의하는 방법도 가능하다. #define 매크로_이름 매크로 매크로를 해제하는 것은 #undef를 사용한다. #undef 매크로_이름 매크로를 해제한 상태에서 해당 매크로를 다시 사용하려고 하면 컴파일 에러가 발생한다.

C++에서 구조체와 클래스 차이

최근까지 흔한 커리큘럼이 C를 배우고 C++로 넘어가는 과정이었다. 두 언어를 완전히 다르게 보는 시각에서 접근해서인지는 몰라도, C++에서 구조체와 클래스의 차이를 잘못 이해하고 있는 사람들이 여럿 있는 듯 하다. 특히 C에서의 struct를 가지고 와서 C++의 struct와 동일시하면서, C++에서는 struct는 무조건 금기시 되어야 하는 것으로 분류해 무조건 class를 쓰는 게 옳다고 생각하는 오개념을 가진 사람들도 있었다. C++에서의 struct와 class의 차이를 C의 struct와 C++의 class로 잘못 비교하고 있다는 것을 알지 못한 채로 개념이 굳어져 가는 사람들이 많은 것 같다. C++을 대하는 태도와 관심 정도에 따라 이럴 수 있다고 생각하기 때문에 이를 혼동한다고 해서 큰..

[C++] STL을 사용해 간편하게 알고리즘 문제 풀기

알고리즘 문제를 풀다 보면, 어떤 경우에는 데이터 처리에 앞서 정렬을 해야 하는 경우가 있다.그럴 때마다 정렬소스를 짜는 것이 비효율적일 뿐더러 정렬 이후 데이터 처리에 신경을 써줘야할 때문제의 시간복잡도를 고려해 퀵 정렬 등을 짜고 있는 건 생산적이지 못하다고 느꼈다.정렬에 대해 자세히 아는 건 좋지만, 그걸 실용적으로 활용하는 것도 중요하다는 이야기다. C언어를 주로 썼을 때는, qsort를 사용했다.(이부분에 대해서는 다른 포스팅에서 소개하겠다.) C++에서는 sort를 사용하면 빠른 시간 내에 정렬된 결과를 받을 수 있다.성능 측면에서는 다른 함수에 비해서는 준수한 수준이다. 이 성능에 대한 진 단순히 퀵 정렬만으로 구성한 정렬이 아니라 복합적으로 힙정렬, 삽입정렬도 섞여 있기 때문이다. 아래 사..

백준] 입력의 테스트 케이스가 존재하지 않는 경우

대부분의 문제는 테스트 케이스를 입력 받고 그 케이스에 따른 입력값을 받거나,테스트 케이스의 수를 제한하지 않는다고 하더라도 종료를 뜻하는 입력 값을 받는 경우가 대부분이다.그러다 간혹 테스트 케이스의 입력도 없고, 종료 조건도 명시되어 있지 않은 문제들이 있는데EOF의 개념이 없는 사람들은 간단한 문제(심지어 a+b)임에도 풀지 못하는 경우가 있다. 아래 문제는 테스트 케이스 개수나, 프로그램을 종료하는 특별한 입력값을 요구하지 않는다.EOF를 입력받을 때 프로그램을 종료하는데, C와 C++에서 이 EOF는 아래와 같이 처리할 수 있다. https://www.acmicpc.net/problem/10951 while(cin>>a>>b) while(scanf("%d %d",&a,&b)!=EOF)

C,C++] 조건 컴파일 문

헤더 파일을 작성하고 이용할 때 주의해야하는 부분이 있다. 클래스나 함수가 선언된 헤더 파일을 여러 차례 include 하면, 중복 선언으로 인해서 컴파일 오류가 발생할 수 있다는 점이다. 헤더파일을 이용하는 main.cpp에서 A라는 헤더 파일을 여러 차례 include하는 경우는 극히 드물겠지만, 문제는 다른 헤더 파일 B와 C에서 이미 헤더 파일 A를 내부적으로 include한 경우 일일이 헤더파일을 확인하는 방법 외에는 중복 선언을 방지할 방법이 없다. 제대로 숙지하지 못한 상태에서, A, B, C를 연달아 include하는 경우, 결국 헤더 파일 A의 중복 선언이 두 차례 발생해 컴파일 오류를 발생시킬 것이다. 이 문제를 해결해주는 것이 바로 조건 컴파일 문이라는 것이다. 헤더 파일을 작성하는 ..