C언어 기본 문법 재 정리!!

2014. 1. 20. 21:32Programing/C Language

서식문자

서식문자의미기능
\nnewline출력 위치를 다음 줄의 첫번째 칸으로 옮긴다
\ttab출력 위치를 다음 탭 위치로 옮긴다
\rcarriage return출력 위치를 현재 줄의 첫번째 칸으로 옮긴다
\bbackspace출력위치를 한 칸 뒤로 옮긴다
\aalert경고음을 낸다

 줄바꿈 문자는 아스키 코드값이 10으로, \012(8진수, 접두어 없어도 8진수 해석), \x0a(앞의 x로 16진수임을 확인)으로도 가능하나, 쉽게 사용할 수 있도록 \n을 사용하게 만든것이다.

 


논리연산자

 

논리 연산자

  • 논리부정 ( !) - NOT

    • 수식이 0의 값을 가질때 논리부정을 시키게 되면 1이고 , 1의 값을 가질 때 하게 되면 0이다.
  • 논리곱 (&& ) - AND  :  ex ) a && b

    • a , b 둘 다 참(1) 일 때  참( 1 ) 의 값을  리턴한다.
    • 좌변의 값이 거짓일 경우 우변의 값을 평가하지 않는다.
  • 논리합 ( || ) - OR : ex) a || b

    •   a 나 b 둘 중 하나만 참의 값을 가지면 참( 1 )의 값을 리턴한다.
    •  좌변의 값이 참일 경우 우변의 값을 평가하지 않는다.
  •  베타적 논리합 - XOR  :  C에서는 존재하지 않는다.

    •    비트 XOR 연산자를 사용 표현 할수 있다. if ( (a)^(b) )  return 1


 

 

변수의 영역과 데이터 전달

  •  AUTO - 자동 변수, 키워드를 입력하지 않아도 자동으로 설정된다. 

선언되는 위치함수의 시작 부분(블록의 시작부분)   
사용 범위함수 내부에서만 사용(블록 내부에서만 사용).   ex ) main 함수
생존 기간함수가 리턴될 때(블록이 끝날 때) 사라진다.
메모리의 위치스택 (Stack ) 영역
자동 초기화자동 초기화가 안 되고 쓰레기 값이 존재한다  - >  선언시 초기화가 필요하다.
  • STATIC - 정적변수 . 자료형 앞에 붙였을 떄 정적변수가 된다. 함수
선언되는 위치함수 내외부
사용 범위 함수의 내부에서 사용되면 내부 정적변수 , 외부에서 선언되면 외부 정적변수.
생존 기간프로그램 시작시에 기억공간이 할당되고 프로그램 종료시에 기억공간에서 사라진다
메모리의 위치 정적 데이터 영역
자동 초기화자동으로 초기화 된다. 기억공간 생성,초기화가 함수의 호출에 영향을 받지 않는다. --> 한번만 초기화

   ※ 내'외부 정적 변수의 차이 - 내부정적변수는 함수안에서 선언하고 사용가능하다.( 자동변수 특성 ) ,외부정적변수는 함수 밖에서도 사용가능하다.

    (프로그램 전체가 하나의 모듈로 구성되어 있을 경우 외부 정적변수와 외부변수는 전 혀 구별되지 않는다)

 

  • EXTERN -  외부 변수

    • 함수의 외부에서 정의 되어 프로그램 전체에서 사용 가능
    • 파일의 선두에서 정의하는 것이 좋다
    • 정적데이타 영역에 저장 되어진다.
  •  REGISTER -  레지스터변수

    •  CPU안의 레지스터라는 공간에 저장된다
    •  RAM보다 입출력 속도가 빠르므로 단순하면서도  엄청난 횟수를 반복할 필요가 있을 때 사용 하면 좋다.
  • ① 레지스터 변수로 사용할 수 있는 데이터형은 int, unsigned, (근거리) 포인터형의 3가지 뿐이다.

    즉 2바이트 크기의 데이터형만이 가능하다. 레지스터가 16비트(2Byte)이기 때문이다.

    ② 레지스터 변수로 선언할 데이터형이 int형일 경우, int를 생략하고 register만 써도 된다.

    ③ 레지스터 변수로 선언한다고 모두 레지스터 변수가 되는 것은 아니고, 조건에 맞는 변수 중 처음 2개만 레지스터 변수로 지정된다.

    ④ 레지스터 변수로 선언하지 않아도 Turbo-C는 가능한 변수를 레지스터 변수로 만들어 사용한다.

 

 

자료형에 따른 여러가지 변환 문자열

구분변환문자열출력형태대상 자료형
정수형%d부호있는 10진수signed형의 정수형 변수, 상수
정수형%u부호없는 10진수unsigned형의 정수형 변수, 상수
정수형%o, %x부호없는 8,16진수signed,unsigned 구분없이 각 진법에 따라 출력
실수형%lf부호 있는 소수점 형태실수형 변수, 상수
실수형%le부호 있는 지수(e)형태실수형 변수, 상수
문자형%c하나의 문자char형 변수, 문자상수
문자열%s문자열char형 배열의 이름, 문자열 상수

정수값은 4바이트의 크기, 1바이트는 8비트, 즉 2의 32승만큼 표현가능하다


0x1, 0x10, 0x100, 0x1000, 0x10000, 0x100000, ... 처럼 최상위 비트만 1이고 뒤로 0이 따라붙는 수와 10진수와의 관계를 외워놓는 것도 유용합니다.


0x1 = 1 뒤에 0이 하나도 없기 때문에 2의 0승 = 1
0x10 = 1 뒤에 0이 4비트 있으므로 2의 4승 = 16
0x100 = 1 뒤에 0이 8비트 있으므로 2의 8승 = 256
0x1000 = 1 뒤에 0이 12비트 있으므로 2의 12승 = 4096
0x10000 = 2의 16승 = 65536
0x100000 = 2의 20승 = 1048576 ==> 1MB
0x1000000 = 2의 24승 = 16777216
0x10000000 = 2의 28승 = (외울 필요없음)
0x100000000 = 2의 32승 = 4294967296 ==> 4GB


위의 각 수에서 1을 빼면


0 = 0x1 - 1
0xF = 0x10 - 1
0xFF = 0x100 - 1
0xFFF = 0x1000 - 1
0xFFFF = 0x10000 - 1
0xFFFFF = 0x100000 - 1
0xFFFFFF = 0x1000000 - 1
0xFFFFFFF = 0x10000000 - 1
0xFFFFFFFF = 0x100000000 - 1


이 되겠습니다. 이 일련의 0xFF...F들이 의미하는 것은, 0xF는 4비트로 표현가능한 16진수중에 제일 큰 수, 0xFF는 8비트로 표현가능한 16진수중에 제일 큰 수, 0xFFF는 12비트, 0xFFFF는 16비트, ... 등이 되겠습니다.


결론적으로 %d,%u가 표현가능한 값의 범위는 0x100000000 = 2의 32승 = 4294967296 개로, signed int는 -2147483648 ~ 2147483647 이고, unsigned int는 0부터 4294967295(0xFFFFFFFF)까지입니다.

 #define과 typedef의 차이

 

 1. typedef는 자료형에 대해서만 기호 이름을 부여할 수 있다.

 
2. typedef는 선행처리기를 통해 실행되는 것이 아니고 컴파일러에 의해 실행된다.
 
3. 제한된 범위 내에서 typedef는 #define보다 융통성이 높다
 
typedef char* STR :
    문자형 포인터에 대한 이름
 
#define STR char* :
    문자형 포인터 변수

'Programing > C Language' 카테고리의 다른 글

File RW (파일 읽고 쓰기)  (0) 2014.01.20
C언어의 메모리 구조  (0) 2014.01.20
MOD(%) 연산의 AND(&) 연산으로의 처리  (0) 2014.01.20
#ifdef(if defined)와 #if defined  (0) 2014.01.20
EPOLL API 소개 및 Echo Chat Server  (0) 2014.01.20