본문 바로가기

Programming/C & C++

(29)
warning C4996: 'fopen'이(가) deprecated로 선언되었습니다. warning C4996: 'fopen'이(가) deprecated로 선언되었습니다. 기존 C Library 계열 보안문제를 해결하기 위해 MS사의 Secure 버전을 사용하지 않았다고 말해 주는 것이다. 해결 방법은 fopen 함수를 fopen_s로 사용하거나 (다른 deprecated로 선언되었다는 것들도 함수이름_s로 바꾸어서 사용, 예) strcpy -> strcpy_s) 맨위에 #define _CRT_SECURE_NO_DEPRECATE 로 한줄 추가 해주면 해결할 수 있다.
Void형 포인터 ㅁ void형 포인터 포인터형 변수는 선언할 때 반드시 대상체의 타입을 밝혀야 한다. 가리키는 대상체의 타입을 알아야 *연산자로 대상체를 읽을 수 있고 증감 연산자로 전후 이동이 가능하다. 이런 일반적인 포인터에 비해 선언할 때 대상체의 타입을 명시하지 않는 특별한 포인터형이 있는데 이것이 바로 void형 포인터이다. void형 포인터를 선언할 때는 void *타입을 지정한다. void *vp; 이렇게 선언하면 vp 포인터 변수의 대상체는 void형이 되며 이는 곧 대상체가 정해져 있지 않다는 뜻이다. void형은 함수와 포인터 변수에게만 적용되는 타입이므로 일반 변수에는 쓸 수 없다. void i;라는 선언문은 불법이다. 다음은 void형 포인터의 특징들이되 모두 대상체가 정해져있지 않다는 사실에 기인..
함수와 함수포인터의 차이(void* point) void main() // 이것은 'return되어질 값이 없음'이라는 뜻 void *main() // 이것은 '형이 없는 포인터 값이 return된다'라는 뜻 void 포인터 형은 메모리를 액세스하기위한 정보가 없기때문에 반드시 사용자가 컴파일러에게 어떤형으로 엑세스를 하겠다고 알려줘야 합니다. ex) 보이드 포인트의 사용예 void *p; int n=100; p= &n; printf("void *p : %d", *(int *)p); 출력 void *p: 100 포인터를 배우셨으면 아시겠지만 p값에 n의주소를 대입해주었고. p를통해 n의 값을 엑세스하기위해 *(int *)p라는 식을 써써 n의 값을 얻었습니다. *(int *)p는 int형으로 p가 가르키는 값을 엑세스하겠다는 뜻입니다. void*는 주..
문자형식과 숫자형식으로 상호 변형 (atoi, itoa) (헤더파일 : stdlib.h, wchar.h) 문자형식을 숫자형식으로 int atoi (const char *str); // 문자열을 숫자형식으로 바꾼다. - str : 숫자형식으로 변환할 문자열의 포인트 int _wtoi(const wchar_t *str); // 유니코드 문자열을 숫자형식으로 바꾼다. - str : 숫자형식으로 변환할 문자열의 포인트 반환값 : - 입력된 str값을 유효 숫자 형식으로 바꿉니다. 예로 "abc123"이 있으면 "abc"는 문자 형식이므로 삭제. "123"만 숫자 형식 123으로 변환됩니다. 만일 "abcd"같은 유효 숫자 형식이 없으면 0이 반환됩니다. 변환되는 값이 integar범위보다 크거나 작으면 INT_MIN 혹은 INT_MAX가 반환이 됩니다. ex) cha..
범위(scope)연산자 ㅁ 범위 연산자 사용의 예 // 범위(scope) 연산자 -> :: // 단항 : 전역 범위 // 이항 : 클래스 범위 #include int intNum = 123; //전역변수 main() { int intNum = 321; //로컬변수 cout
연산자 오버로딩(전역 연산자 함수로 작성법) 클래스의 연산자 함수를 정의하는 방법은 다음 두가지가 있다. ① 클래스의 멤버 함수로 작성한다. ② 전역 함수로 작성한다. ② const Time operator+(const Time &T1,const Time &T2) //받는 인수가 2개이다. { Time R; R.sec=T1.sec + T2.sec; R.min=T1.min + T2.min; R.hour=T1.hour + T2.hour; R.min += R.sec/60; R.sec %= 60; R.hour += R.min/60; R.min %= 60; return R; } ㅁ 멤버 연산자와 전역 연산자의 차이 A+B -> 멤버 : A.operator +(B) -> 전역 : operator + (A,B)
연산자 오버로딩(클래스의 멤버 함수로 작성법) 클래스의 연산자 함수를 정의하는 방법은 다음 두가지가 있다. ① 클래스의 멤버 함수로 작성한다. ② 전역 함수로 작성한다. 그 중 1번에 해당하는 방법을 알아보자. ① 리턴타입 Class::operator 연산자(인수 목록) { 함수 본체; } ex) const Complex operator+ (const Complex &T) const { //(리턴타입) (함수이름) (인수(피연산자) (상수함수) Complex R; R.image = image + T.image; R.real = real + T.real; return R; } //inline 함수로 작성 예 ㅁ main에서의 사용법 : A+B A.operator + (B) //A는 연산자함수를 호출하는 객체 //B는 연산자함수로 전달되는 객체 ㅁ co..
Sleep 함수 이해 및 사용법 Sleep는 Thread를 정지시키는 것입니다. Sleep 앞에 대문자로 사용에 주의하며 대문자가 싫으시다면 _sleep도 가능 #include #include // Sleep 가 들어갈 헤더로windows.h 를 사용 void main(void) { while(1) { printf("sleep 의 뜻을 이해하자"); Sleep(3000); //Sleep 스레드를 3초간 정지시킵니다 .. 1000=1 } } 무한루프 시 CPU 할당량이 100%로 올라가는 걸 방지 할 수있다.

반응형