프로그래밍/C++

57

C++ 함수 템플릿(Function Template)

함수 템플릿(Function Template) 최신 C++ 컴파일러들은 가장 최근에 추가된 기능인 함수 템플릿을 구현합니다. 함수 템플릿은 int형이나 double형과 같은 구체적인 데이터형을 포괄할 수 있는 일반형(generic type)으로 함수를 정의합니다. 어떤 데이터형을 템플릿에 매개변수로 전달하면, 컴파일러가 그 데이터형에 맞는 함수를 생성합니다. 함수 템플릿 : 함수를 만들기 위한 템플릿 (정의를 말함) 템플릿 함수 : 템플릿으로부터 만들어지는 함수 (생성된 함수를 말함) 해당 용어에 대해 좀 더 자세히 알고 싶다면(https://sks3297.tistory.com/entry/C-%ED%95%A8%EC%88%98%ED%85%9C%ED%94%8C%EB%A6%BF%EA%B3%BC-%ED%85%9..

프로그래밍/C++ 2019.08.22 Plorence

C++ 함수 오버로딩(Function Overloading)

함수 오버로딩(Function Overloading) 함수 오버로딩도 디폴트 매개변수와 마찬가지로 C++에 새로 추가된 기능입니다. 디폴트 매개변수는 개수를 다르게 사용함으로써 같은 함수를 호출할 수 있게 합니다. 반면 함수 오버로딩은 서로 다른 여러 개의 함수가 하나의 이름을 공유하는 것입니다. 함수 오버로딩은 OOP 다형성의 구현입니다. 함수 오버로딩의 핵심은 함수의 매개변수 리스트, 함수 시그니처(function signature)입니다. 함수 시그니처란 매개변수 개수, 데이터형, 순서에 대한 것입니다. 이때 반환형은 상관없습니다. #include int func1(int num1 , int num2) { return num1 + num2; } int func2(int num1, int num2) ..

프로그래밍/C++ 2019.08.19 Plorence

C++ 디폴트 매개변수(Default Parameter)

디폴트 매개변수(Default Parameter) 디폴트 매개변수는 C++에서 새로 추가된 내용입니다. 디폴트 매개변수는 함수 호출에서 실제 매개변수를 생략했을 경우에 실제 매개변수 대신 사용되는 값입니다. #include int func(int num1 = 1, int num2 = 2) { return num1 + num2; } int main(void) { int result = func(); int result1 = func(1, 2); } func()라는 함수는 매개변수 num1와 num2를 더해서 리턴하는 함수입니다. 첫 번째 함수 호출 후 리턴 값(변수 result의 값)은 3이고 두 번째 함수 호출 후 리턴 값도 동일하게 3입니다. 디폴트 매개변수는 말그대로 '디폴트'입니다. 함수호출을 하는..

프로그래밍/C++ 2019.08.17 Plorence

C++ 함수에 전달하는 값을 설명할 때 헷갈리는 점

문득 어제 게시글을 작성하다가, 이런 생각이 들었습니다. 그때 "첫 번째 인자로 100을 넘겨주고.."를 작성하다가 "parameter와 argument는 다른 건데 인자가 아닌 것 같은데?"라는 생각이 문득 들었습니다. 인자와 같이 따라다니는 놈이 있는데, 그게 바로 인수입니다. 인자 인자는 매개변수를 뜻합니다. C++ 기초 플러스에서는 아래와 같이 서술되어 있습니다. "전달되는 값을 넘겨받는 데 쓰이는 변수를 형식 매개변수(formal parameter)라고 한다." void function(int a,int b){ } a, b가 인자인겁니다. 인수 전달하는 값을 뜻하는데, C++ 기초 플러스에서는 아래와 같이 서술되어 있습니다. "함수에 전달되는 값을 실제 매개변수(actual argument)라 ..

프로그래밍/C++ 2019.08.16 Plorence

C++ 참조 변수

먼저 참조란? 참조(reference)는 미리 정의된 어떤 변수의 실제 이름 대신 쓸 수 있는 대용 이름입니다. A을 B변수의 참조로 만들면, A와 B는 같은 변수를 나타내는 것으로 사용할 수 있습니다. 참조의 주된 용도는 힘수의 매개변수에서 사용합니다. 참조를 매개변수로 사용하면 복사본이 아닌 원본 데이터를 가지고 작업을 합니다. 크기가 큰 구조체를 처리해야 하는 함수에서 포인터 대신에 참조를 사용할 수 있습니다. 참조 선언은 '&'기호로 합니다.(C, C++에서 변수의 주소를 나타내기 위해 &사용한다. C++에서는 하나의 의미를 더 추가한 것이다.) ※C에서는 참조 선언을 못한다. 참조 변수 선언 하기 int A = 10; int & B = A; //이때 B는 참조변수이다 간단한 사용법입니다. 이때 ..

프로그래밍/C++ 2019.08.15 Plorence

C++ 일반 함수와 인라인 함수의 차이(어셈블리로 확인하기)

전에 작성한 게시글(https://plorence.kr/482)에서 일부 내용을 가져왔습니다. 일반적인 함수는 아래와 같이 동작합니다. 함수 호출 명령 도달 함수 호출 명령 다음에 있는 명령 주소를 메모리에 저장 스택에 매개변수 복사후 함수가 시작되는 메모리 위치로 점프 코드 수행 리턴값을 레지스터에 복사 후 저장해뒀던 명령 주소로 돌아옴 인라인 함수와 일반 함수의 차이를 확인하기 위해 프로젝트 설정하기 VS2017 기준입니다. 프로젝트 속성 -> C++ -> 최적화로 들어가서 Ob1이나 Ob2를 선택하고 적용 -> 확인을 클릭합니다. 옵션은 MS docs에서 확인하실 수 있습니다. ( https://docs.microsoft.com/ko-kr/cpp/build/reference/ob-inline-fun..

프로그래밍/C++ 2019.08.13 Plorence

C++ 인라인 함수

인라인 함수의 탄생 프로그램의 실행 속도를 높이기 위해 C++에서 보강되었습니다. 일반 함수와의 차이점을 알려면 일반적인 함수의 호출을 알아야 합니다. 일반적인 함수의 호출:프로그램을 함수의 주소로 점프시켰다가 함수가 끝나면 원래의 자리로 돌아옵니다. 좀 더 자세하게 설명하면 함수 호출 명령 도달 함수 호출 명령 다음에 있는 명령주소를 메모리에 저장 스택에 매개변수 복사후 함수가 시작되는 메모리 위치로 점프 코드 수행 리턴값을 레지스터에 복사 후 저장해뒀던 명령 주소로 돌아옴 ※이 때문에 시간이 많이 걸림(점프 수행, 점프할 위치 기억) 인라인 함수의 특징 함수호출을 그에 대한 함수 코드로 대체합니다. 위의 사진처럼 인라인 함수 호출부분이 함수 코드로 대체가 됩니다. 그래서 점프할 위치 기억, 점프 수행..

프로그래밍/C++ 2019.08.09 Plorence

"C++ 기초 플러스 6판" 문법을 다 보면서..

책 두께 만큼 배울 것도 엄청납니다. 꾸준히 한게 아니라서 1년정도 걸렸습니다. 그때동안 Evernote에 요약정리하면서.. 75개가 쌓였습니다. 아쉬웠던 점은 책에 이상하게 써놓았던게 많았습니다. 생각보다.. 잘못된 내용은 딱 1개였던 것 같은데..그거 마저 기억이 잘 안납니다. 이게 몇 인쇄본인지는 모르겠는데, 정오표에도 없는게 꽤나 있었습니다.

프로그래밍/C++ 2019.05.23 2 Plorence

C,C++ AES 암호화 예제

123456789101112131415161718192021222324252627282930313233343536#include #include #define CBC 1#define ECB 0#include "aes.h" int main(void) { int I, Len; char In[]="Hello AES128..."; BYTE Key[]={0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c}; BYTE EncBuff[80]; BYTE DecBuff[80]; printf("Testing AES128\n\n"); printf("OrgString: '%s'\n", In); Len=strl..

프로그래밍/C++ 2018.12.11 2 Plorence