visual studio 2017 installation 설치
visual studio 2017 installation 개인적으로 몇 가지 취미를 갖고 있는데 그중 하나가 각종 컴퓨터 프로그램 언어를 공부하는 거랍니다. 그런데 먹고살기 바쁘다는 핑계로 며칠 하다가 접곤 해서 아직 기초도 없는 상태인데요. 없는 시간을 쪼개서 다시 한 번 프로그램 언어를 공부해보려고 하고 여러 가지 언어 중에서 가장 기초라고 할 수 있는 C언어부터 다시 하나씩 볼 생각입니다. 그리고 실습을 위해..
C언어 기초 ws2_32.lib 추가
C언어 기초 ws2_32.lib 추가  윈도우에서 FormatMessage()와 WSAGetLastError()를 이용해서 에러 정보를 확인할 수 있는데요. WSAGetLastError()를 호출해서 에러를 의미하는 정수형이 리턴되는데 이때 이 숫자의 의미를 알기 위해서는 FormatMessage()를 사용해야 하는 것입니다. 윈도우에서 이 함수들을 사용하기 위해서는 ws2_32.lib를 프로젝트 라이브러리 파일에 추가해줘야 하는..
C language structure array
C language structure array    이번 글에서는 c언어의 구조체 배열에 대해서 알아보겠습니다. 배열이란 같은 자료형을 여러 개 선언할 때 하나로 묶어서 관리할 수 있는 역할을 하는데요. 구조체 역시 변수를 여러 개 선언한다면 이것들을 하나의 배열로 만들어서 관리할 수 있습니다. 구조체 배열을 선언하는 방법 역시 일반 자료형의 배열 선언방법과 같습니다.   struct (구조체이름) (배열이름) [길이]..
c언어 구조체 개념 정리
c언어 구조체   c언어 구조체란 여러 개의 변수를 하나의 그룹으로 묶어서 자료형을 만드는 건데 여기에는 포인터는 물론 배열도 포함될 수 있습니다. 기본 자료형과는 성격이 약간 다르지만 편리성을 위해서 새로운 자료형을 만드는 것이라고 생각하면 될 거예요. 예를 들어 평면에서 좌표를 구한다고 생각해볼게요. 좌표는 x,y가 무조건 짝을 이루어서 다녀야 합니다. 떨어질 수가 없는 관계인 거죠. 그래서 이 둘을 하나의 구조체로 묶어서 사용할 수 있..
C language puts, fputs, gets, fgets
C language puts / fputs  c언어를 공부하면서 그동안 문자열을 입력받기 위해서 scanf() 함수를 이용했고 출력할 때는 printf()를 이용했었는데요. 이 scanf() 함수는 공백을 처리하지 못하는 단점이 있었습니다. 하지만 여기서 알아볼 입력 함수들은 공백도 처리하면서 문자열을 입력받을 수 있기 때문에 유용한데요. 먼저 문자열을 출력하는 puts와 fputs부터 간단하게 알아보고 입력받는 gets..
c언어 독학 EOF
c언어 독학 EOF  취미생활로 c언어 독학을 하고 있는데 그동안 문자열을 입력받고 출력할 때는 scanf()와 printf() 함수를 이용했습니다. 하지만 이 녀석들은 메모리의 공간도 많이 차지하고 연산의 양이 많은 단점이 있어서 하나의 문자만 입력받고 출력할 때는 putchar, fputc, getchar, fgetc 함수를 이용하는 게 좋기 때문에 지난 글에서 이 함수들의 쓰임새를 대충 살펴봤습니다. 그런데..
c언어 문자 입출력 함수
c언어 문자 입출력 함수  지난 글에서 데이터의 흐름을 의미하는 스트림에 대해서 알아봤었는데요. 그를 바탕으로 문자 단위의 입출력 함수인 putchar, fputc, getchar, fgetc 함수에 대해서 알아보겠습니다. ■ 먼저 하나의 문자를 출력하는 함수는 putchar(int c)와 fputc(int c, FILE*stream) 함수인데요. putchar는 표준 출력 스트림 stdout으로 전송하는 함수입니다. ..
c언어 기초 스트림 stream
c언어 기초 스트림 stream  이번 글에서는 c언어 기초 중에서 데이터를 입력받고 출력하는 역할을 하는 스트림(stream)에 대해서 개념 정리를 해볼까 합니다. 프로그램에서 데이터의 입력과 출력은 한 방향으로만 진행되는데 키보드 등의 입력장치에서 컴퓨터로 데이터가 들어가고 컴퓨터에서 모니터로 출력되는 등 한 방향으로만 움직이는데 이들 사이에는 데이터가 이동할 수 있는 스트림이라는 가상의 다리가 있습니다. 스트림은 한 방향으로..
c언어 프로그램 main() 함수 인자 전달
c언어 프로그램 main() 함수 인자 전달  지금까지 C언어 프로그램을 공부하면서 main() 함수에는 인자를 전달하지 않은 기본 형태만 사용해왔는데 main() 함수도 인자를 전달할 수 있고 이를 확인하기 위해서는 프로그램을 실행하는 방법이 조금 차이가 있거든요. 그 과정을 정리해볼까 합니다. 먼저 다음과 같이 main() 함수에 인자를 전달할 수 있습니다.   ▲ 제한적이긴..
C언어 기초 매개변수로 함수 전달하기
C언어 기초 매개변수로 함수 전달하기  지난 글에서 C언어 기초 중에서 함수 포인터에 대해서 알아봤었는데요. 함수의 이름도 메모리상의 주소를 저장하는 변수라고 정리했었습니다. 그렇다면 다른 포인터와 마찬가지로 이 이름을 매개변수로 던져주면서 호출되는 곳에서는 그 값을 포인터로 받아서 프로그램을 실행할 수 있겠죠?   ■ 이번 글에서는 그 내용을 확인하는 예제를 만들면서 정리해볼 건데요. 어떤 ..
C언어 기초 함수 포인터
C언어 기초 함수 포인터  이번 글에서는 C언어 기초 중에서 함수 포인터에 대해서 기본 개념과 선언하는 방법을 알아보겠습니다. 우리가 정의하는 함수도 변수와 마찬가지로 메모리에 저장되는데요. 함수의 이름이 그 주소 값을 의미하는 것입니다. 즉, 이 주소 값을 저장하기 위한 별도의 함수 포인터를 선언할 수 있습니다.     함수 포인터도 선언하기 위해서는 먼저 포인터 형을 결정지어야 하는데 다음과 같은 ..
c언어 기초 프로그래밍 2차원 배열 이름이 가리키는 것들
c언어 기초 프로그래밍 2차원 배열 이름이 가리키는 것들  C언어의 2차원 배열 이름에 관한 이야기를 좀 해볼까 한다. 그전에 간단하게 1차원 배열 이름에 대해서 정리하고 넘어가 보자. 1차원 배열의 이름이 가리키는 것은 첫 번째 요소이며 이는 포인터와 같은 역할을 한다. 그리고 이 배열을 인자로 전달할 때 호출되는 함수에서는 포인터 변수로 받아서 배열에 접근해야 한다.    int aaa[3];  ▲&nbs..
C언어 독학 포인터 배열
C언어 독학 포인터 배열 ■ 포인터도 변수의 메모리 주소를 저장하는 일 종의 변수이다. 그렇기 때문에 이 또한 배열로 저장할 수 있는데 일반 변수의 배열과 크게 다르지 않기 때문에 간단한 예제를 통해서 그 내용을 알아보고 이중 포인터가 필요한 이유에 대해서 정리해본다. 먼저 선언하는 형식은 다음과 같다. int * aaa[10]; ▲ 길이가 10인 int형 포인터 변수이다. aaa가 가리키는 것은 첫 번째 ..
C언어 독학 Call by reference
C언어 독학 Call by reference   특정 변수의 메모리상의 주소 값을 저장하는 것이 포인터이고 이 녀석도 변수의 한 종류이기 때문에 메모리에 주소 값을 갖게 이중 포인터에 그 값을 저장할 수 있다고 지난 글에서 정리를 해봤다. 이번 글에서는 이중 포인터를 활용하는 예제를 통해서 그 과정을 정리해볼까 한다. 그전에 전달되는 인자의 개념을 다시 한 번 정리하고 넘어간다. 함수를 호출하면서 던져주는 값인 인자는 해당 값 자체를 넘..
C언어 독학 이중 포인터
C언어 독학 이중 포인터 포인터란 어떤 변수의 메모리상의 주소값을 저장하는 변수입니다. 그리고 포인터 자체도 변수이기 때문에 메모리에 자리를 잡게 되고 이 녀석도 자기의 주소값을 갖게 됩니다.   그렇기 때문에 포인터 변수를 대상으로 '&'연산이 가능하며 반환되는 이 녀석의 주소 값을받아서 저장할 수 있는 것을 이중 포이터라고 합니다. 즉, 포인터 변수를 가리키는 또 다른 포인터인데요. 선언하는..
C언어 독학 배열의 길이 없이 초기화하기
C언어 독학 배열의 길이 없이 초기화하기C언어에서 배열은 1차원과 다차원(2차원)이 있는데요. 이 배열들을 초기화하는 과정은 거의 비슷하다는 걸 지난 글에서 확인해봤습니다. '거의' 같다는 건 다른 점도 있다는 뜻이겠죠?^^ 몇 가지 차이점 중에서 이번 글에서 알아볼 배열의 길이를 알려주지 않고 초기화하는 방법이 조금 차이가 있습니다.  예를 들어 1차원 배열은 다음과 같이 길이를 명시하지 않고 초기화하면...int x []={1,..