1. 함수의 원형 본격적으로 내용을 다루기에 앞서 함수 포인터의 원형과 포인터의 대상이 될 함수와의 원형은 같아야 한다. 이 점은 일반 서적에서 다루고 있는 내용이라 다 알 것이라고 생각되므로 함수의 원형에 대하여 간단하게 Q/A 식으로 짚고 넘어가겠다. 이해가 안되면 무조건 외우는 것도 한가지 방법이라고 생각됨. 마지막으로 함수 포인터는 함수가 아니라 원하는 함수의 주소를 담고 있는 변수이다. 근본적으로는 포인터 (변수 포인터)에 다른 변수의 주소를 넣는 것과 별로 다를 것이 없다. 다만 함수 포인터의 경우는 변수의 주소가 아닌 함수의 주소라는 점만 다를 뿐이다. int a; char c[5]; float* f; "Hello, World" Q) 위의 코드에서 a, c, f, "Hello, World"의..
먼저 이 글은 포인터에 대한 이해를 필요로 한다. 포인터에 대한 기본지식이 있다고 가정하고 글을 쓰도록 하겠다. int GetAreaEx( int x, int y ) { return x * y; } 우선 이런 간단한 함수가 있다. 우리는 이 함수를 호출하기 위해 명시적으로 GetAreaEx( x, y ); 이런식으로 기술해야 한다. 하지만 예를 들어 GetArea2, GetArea3, ..., GetAreaN 이런식으로 비슷한 함수가 존재하고 이를 상황에따라 다르게 호출해야 한다면 이 방식으로는 관리도 어려울 뿐더러 효율성도 떨어지고 코드량도 많이질 것이다. 또한 외부(스크립트 등)에서 어떤 특정한 함수를 호출하려 할때도 방법이 묘연할 것이다. int (*GetArea)( int, i..
함수포인터 (Function pointer) 포인터가 무엇인지는 다들 아실텐데요, 특정 변수에 대한 메모리 주소를 담을 수 있는 변수를 포인터 변수라고 합니다. 그렇다면 함수포인터란, 특정 함수에 대한 메모리 주소를 담을 수 있는 것 이라고 정의할 수 있겠습니다. 함수포인터를 쓰는 이유는 무엇일까요? 1. 프로그램 코드가 간결해집니다. 2. 함수포인터를 배열에 담아서도 사용할 수 있으므로 중복되는 코드를 줄일 수 있습니다. 3. 상황에 따라 해당되는 함수를 호출할 수 있으므로 굉장히 유용합니다. 그 외에도 함수 포인터를 이용하여 콜백함수를 구현할 수 있게 되는 등 편리하고 유용한 코드를 작성할 수 있게 됩니다. 우선 함수포인터의 모양에 대해 알아보도록 하겠습니다. int (*FuncPtr) (int, i..
일명 매크로 프로그램을 만드는 방법을 간단히 소개하겠다. 가장 먼저해야 할 일은 제어하고자 하는 프로그램의 핸들을 얻어 오는 것이다. Spy+프로그램을 이용하면 쉽게 찾을 수 있다. 창 찾기 창이 뜨면 찾기 도구를 드래그 하여 원하는 응용 프로그램에 끌어 놓는다. FindWindow로는 최상위 부모 윈도우만 찾을 수 있다. 제어하고자 하는 응용프로그램에 최상위 윈도우에 끌어다 놓는다. 원하는 프로그램을 선택하면 아래와 같이 윈도우 정보가 표시 된다. 여기서 캡션과 클래스를 통해 원하는 윈도우를 찾을 수 있다. 파일-로그 메세지 메뉴을 이용해 창을 찾은후 확인을 누르면 현재 윈도우가 어떠한 메세지를 받는지 모두 볼 수 있다. 여기서 발생하는 이벤트중 키보드, 또는 마우스 관련 이벤트를 확인 하면 된다. u..
연산자와 상수 1. 연산자 (Operator) 우선순위별로 보면 다음과 같다 1. 소괄호 () : 수학에서 괄호 속을 먼저 연산하는 것을 떠올리면 된다. 2. 단항연산자 : 1개의 항에 대하여 연산을 해준다. 2-1) 논리연산자 ! : 피연산자 a의 값이 거짓(0)이면 참(1)을, 그 외의 수는 거짓(0)을 반환한다. 사용법 [ !a ] 2-2) 비트연산자 ~ : 피연산자 a를 bitwise(비트 반전) 시킨다. 즉, 1100 -> 0011. 사용법 [ ~a ] 2-3) 증감연산자 ++, -- : 피연산자의 앞에 오냐(전위증가), 뒤에 오냐(후위증가)에 따라 의미가 약간 달라진다. ++a (전위증가) 의 경우 a를 1 증가시키고 나머지 연산을 시행하는 반면 a++ (후위증가) 의 경우 연산을 모두 마친 ..