본문 바로가기

프로그래밍 언어/C

C/C++ programming tutorial

C/C++ programming tutorial

C_Cpp.pdf
5.80MB


1. C Basics

1.1 source code

#include <stdio.h>

int main() {
	printf("Hello world\n");
    return 0;
}

1.2 How to compile

$ gcc hello.c -o hello
  • gcc : 컴파일링 명령
  • hello.c : 소스 파일 이름
  • hello : 컴파일러로 만들어낸, 실행 가능한 파일 executable file
    • 설정하지 않으면  a.out이 디폴트

1.3 How to execute

./hello

1.4 Data types

1.5 Variable Declaration

  • example
int length = 100;
char num = '9' // The actual value is 57 (based on ASCII)
float deposit = 240.5;
unsigned short ID = 0x5544;

1.6 Variable Types

  • 지역 변수 local variable :  함수 내부에 선언되는 변수로 오직 함수 내부에서만 사용할 수 있다.
  • 정적 변수 static variable : 'static' 키워드를 붙여서 선언해야 한다. 함수 밖으로 빠져나가도 사라지지 않는 변수이다.
  • 전역 변수 gloval varaible : 지역 변수 선언 방식과 동일하지만, 프로그램 함수 외부에서도 사용될 수 있다. 즉, 모든 함수에서 접근 가능한 변수이다. 

1.7 Variable Definition vs Declaration

  •  definition : 컴파일러에게 변수를 알리는 것으로, 변수의 타입, 이름, 메모리 위치를 알려준다.
    • declaration + space reservation
  • declaration : 변수에 대한 정보를 묘사하지만, 메모리 위치를 알려주지는 않는다. 

1.8 printf() function 

  • int, float, string을 적절하게 출력하는 함수 
printf("format", variables);

// example)
int id = 5200;
char * name = "Kim";
printf("%s's ID is %d\n", name, id);
// Kim's ID is 5200
  • format identifiers

  • display space 명시하기 

아래 예시와 같이 형식자 사이에 자릿수를 명시한다. 

printf("The student id is %5d \n", id);

1.9 Arithmetic Operations

  • multiplication *
  • division /
  • modulus %
  • addition +
  • subtration -

  • x = x+1 or x++ or x+=1
  • / 나눗셈 몫, % 나눗셈 나머지 
  • %의 피연산자는 정수만 가능 (실수 X) 

1.10 Logical Operations

  • 0 = false
  • non Zero (0이 아닌 다른 숫자) = true
  • && B = A and B
    • & : 비트 연산자 
  • || B = A or B
    • | : 비트 연산자
  • == B = is A equal to B?
  • != B = is A not equal to B?
  • > B
  • >= B
  • < B
  • <= B
  • example

1.11 Conditionals 

  • if statement
if (expression) {
	statement...
}
else if (expression) {
	statement ...
}
else {
	statement ...
}
  • switch statement
switch (expression)
{
	case item1:
    	statement ...
        break;
	case item2:
    	statement ...
        break;
        
    ...
    
    default:
    	statement
        break;
}

1.12 Loops

  • for
for (initialize; terminate test; modifier) {
	statement ...
}
  • while
while(expression){
	statement ...
}

1.13 Arrays

int arr[50];
char name[100];
int table [30][40];

1.14 Strings

  • char의 배열 = string
  • \0 으로 문자열의 끝을 표시한다. 
  • 예를 들어 char name[8]을 선언하고 Choo를 저장하면 문자열의 길이는 4 이지만 \0표시로 인해 5 bytes가 사용된다. 

2. Functions

  • C 프로그램은 하나 이상의 함수로 구성된다.
  • 항상 하나의 main() 함수를 가지고 있다.
  • 중복되는 코드의 경우 함수로 선언하여 필요할 때 해당 함수를 호출할 수 있다. 

2.1 Function  types

  • library functions : 시스템에 사전 정의된 함수 
  • user-defined functions : 개발자가 직접 만든 함수 

2.2 Invocations Function

2.3 Function Definitions

  • 호출되기 전에 반드시 정의되어야 한다. 
return-type function_name(parameter type list){
	declarations statement...
}
  • 파라미터 타입 리스트는 함수를 호출할 때 전달되는 파라미터와 그 순서와 데이터 타입이 일치해야 한다. 
  • 반환형의 기본값은 integer이고, void이면 반환값이 없음을 의미한다. 

2.4 Function Definition General Order

  1. #include, #define
  2. types, typedef
  3. struct
  4. function prototypes
  5. main() function 
  6. function definitions

2.5 call by value vs call by reference

  • call by value

함수를 호출하면, 파라미터를 위한 메모리 영역이 만들어지고, 인자의 값이 해당 메모리 영역으로 복사된다. 

파라미터로 전달된 값을 식별자로 사용하거나 함수 내부에서 값을 바꾸면, 다른 메모리 영역을 확보하여 바꾼 값을 복사해서 저장한다. 

즉, 원본 값은 업데이트가 일어나지 않는다. 

 

  • call by reference

함수 내부에서 파라미터의 값을 바꾸면 파라미터가 저장된 메모리 주소를 전달하여 실제 메모리에 저장된 원본 값이 바뀐다.

3. Pointer and Array

3.1 pointer and array

  • 배열은 연속적인 메모리를 할당받는다. 
  • 포인터를 이용해서 배열 요소에 접근할 수 있다. 
  • string은 char * 포인터로 나타낸다.
  • example

3.2 command-line argument

int main(int argc, char * argv[]);
  • argc : 인자의 개수
  • argv[] : 입력 스트링 포인터 배열 
// example of passing arguments
./hello 10
# include <stdio.h>

int main(int argc, char * argv[]){
	int i = 0;
    printf("The argc is %d\n", argc);
    for (i=0; i < argc; i++) {
    	printf("The %dth element in argv is %s\n", i, argv[i]);
    }
    return 0;
}


// ./hello 10 
>> The argc is 2
>> The 0th element in argv is ./hello
>> The 1th element in argv is 10

3.3 Data structure

  • 하나 이상의 자료 형을 가지고 있는 자료 구조 
  • 구조체를 자료형으로 가지고 있어도 된다. 

4. File input and output in C++

4.1 General File I/O step

  1. 프로그램에 fstream 헤더파일을 include // #include <fstream>
  2. file stream 변수 선언
  3. 파일 스트림 변수와 입출력 소스를 연결
  4. 파일 오픈
  5. >>, <<, 또는 다른 입출력 함수로 파일 스트림 변수사용
  6. 파일 클로징
  • stream : 일련의 문자 
    1. interative (iostream) : 
      • cin : 키보드로 입력한 스트림
      • cout : 화면에 보이는 출력 스트림
    2. file (fstream)
      • ifstream : 새로운 입력 스트림 정의
      • ofstream: 새로운 출력 스트림 정의 
  • example

4.2 open()

  • to associate a file stream variable declared in the program with a physical file at the source, such as disk
  • input file : open() 실행 전에 반드시 파일이 존재해야 하고, 파일이 없다면 실패한다.
  • output file : output 파일이 없으면 빈 파일을 output을 준비한다. 있다면 디폴트로 파일이 오픈될 때 오래된 버전의 내용을 지운다. 
  • 접근하기 전에 파일 확인하기 

4.3 more input file-related functions

  • reading example

  • more output file-related function

  • writing example

4.4. file open mode

  • example

4.5 summary 

  • input file-related

  • output file-related

5. Programming Tips

  • magic number 지양
  • 전역 변수 지양
  • 중복 지양
  • 주석 처리
  • 코드 작성 전 구상
  • Dev C++ 사용 

References

  • 2021-1 성균관대학교 소프트웨어학과 컴퓨터네트워크 개론 (추현승 교수님) 수업을 듣고 정리한 내용입니다.
  • 2021.03.03