선언 -> 입력 -> 처리 -> 출력
(.c) 전처리기: 전처리구문 처리 #include<stdio.h>
(.i) 컴파일러: 고수준언어를 저수준언어로번역
(.s) 어셈블러: 완전히 기계어로
(.EXE) 링커: 여러개의 오브젝트파일을 합치거나 라이브러리를 합치는 역할
한줄씩 읽어서 실행(통역
), 별도 실행파일이 없다.
최우선연산자 ( ., [], () )
단항연산자 ( ++,--,!, ...
산술연산자 ( *,/,%,+,-,shift)
시프트연산자 ( >>,<<,>>> )
비교연산자 ( >,<,>=,<=,==,!= )
비트연산자 ( &,|,,~ )
논리연산자 (&& , || , !)
5&3 -> 0101 & 0011 = 1; -> 둘다 1이어야 1
5|3 -> 0101 | 0011 = 0111 = 7; -> 둘중하나만 1이어도 1
5^3 -> 0101 ^ 0011 = 0110 = 6; -> 틀려야 1
10>>2 : 2개 밀어버림
1010 -> 10(2) = 2;
10<<2 : 2개 0붙임
1010 -> 101000
1/2 = 0
7/2 = 3
%d 부호있는 10진수
%f 고정소수점
%c 문자출력
%s 문자열출력
%x 16진수
%o 8진수
%05d, 5 -> 00005 (0으로 빈칸 채우고, 다섯개의 공간)
%5d, 5 -> 5 (' '는 공백을 뜻함. 다섯개의 공간을 만든다)
%f, 3.26 -> 3.260000 (소수점 6자리)
%6.1f, 3.26 -> 3.3(6개의 공간, 소수점 1자리, 반올림)
%-6.1f, 3.26 -> 3.3 (6개의 공간, 왼쪽부터 출력, 소숫점1자리)
%-6.3f, 3.26 -> 3.260 (6개의 공간, 왼쪽부터 출력, 소숫점 3자리)
#define N 10
#define SQR(X) X*X
SQR(N) = SQR(10) = 100;
SQR(N+2) = N+2*N+2 = 10+2*10+2 = 10+20+2 = 32;
// ****** SQR(12) 아님!!! *******
struct 구조체명{};
구조체에 포인터 사용시 -> 이렇게 부여함! (.대신)
전역변수. 초기화하지 않으면 자동으로 0을 대입한다.
일반적인 if문과 다르게, fork에서는 if문을 두번 수행한다. 부모->자식 순서로!
부모: 200 (어쨌든 자식보다 큰값을 줌)
자식: 0
실패시 -1
pid = fork();
if(pid<0){}
else if(pid == 0){} //자식
else { wait(NULL)} //부모
a[행][열]
darr[3][3]
darr = 100(첫번째행열의 주소값)
darr[0] = 100 | 1(100) | 2(101) | 3(102)
darr[1] = 103 | 4(103) | 5(104) | 6(105)
darr[2] = 106 | 7(106) | 8(107) | 9(108)
*darr = 100 //darr의 값
*darr[0] = 1
**darr = 1 //darr의 값의 값