Program: Printing a Pun 파일이름은자유롭게짓되확장자는항상.c 로지정할것을권고 for example: pun.c #include <stdio.h> // directive 지시자 C Fundamentals adopted from KNK C Programming : A Modern Approach int main(void) // function 함수의시작 { /* 문장시작 */ printf("to C, or not to C: that is the question.\n"); return 0; } /* 문장끝, 함수끝 */ 컴파일하기 % cc -o pun pun.c % gcc -o pun pun.c or 실행하기 (linux 라는조건하에 ) %./pun 2 간단한프로그램의기본골격 The General Form: Directives 지시자 1 Directives 지시자 Example: #include <stdio.h> 1 directives Example: #include <stdio.h> 2 int main(void) { 문장들 } 시작 끝 C 프로그램이컴파일되기전에전처리기를거침 지시자에쓰인명령들이전처리기에서활용됨 <stdio.h> 는헤더이고표준입출력라이브러리함수들의정의를포함 Directives 는언제나 # 으로시작 기본적으로 directives 는한줄씩표현 ; 줄의끝을알리는세미콜론이나특별한마커가없음 4
The General Form: 함수 int main(void) 2 함수이름main 이라는이름아래같이실행될여러문장이묶여있음 { } # of statements return x + 1; Library functions 들은 c 언어에서기본으로제공함 함수가계산한값을호출한대상에게돌려주기위해 return 문장을씀 main 함수는필수적임 main 특별함 : 프로그램이실행되면제일처음호출되어실행됨 main 의실행결과로상태코드를리턴함 ;0 이면정상종료를뜻함 어떤컴파일러에서는 return 문장이없으면경고메시지를출력함 The General Form: Statements 문장 statements 프로그램이동작하면실행해야될명령들로서모든문장은세미콜론으로마침표를찍어야함 pun.c 은두종류의문장을썼음 uses only two kinds of statements. 하나는 return 문장 ; 다른하나는 function call( 함수호출 ). 함수에명시된작업을처리하라고시키는것을함수를호출한다라고함 (calling the function). pun.c 은 printf 를호출하여문자를출력함 : printf("to C, or not to C: that is the question.\n"); 5 6 문자열출력 : printf printf 함수가문자열을출력하면쌍따옴표로묶인모든글자는출력하되쌍따옴표는출력하지않음 printf 는문장을출력후줄바꿈을하지않음 printf 에서문장을바꾸기위해서는 \n(the new-line character) 를쌍따옴표안에넣어야함 같은효과 printf("to C, or not to C: that is the question.\n"); printf("to C, or not to C: "); printf("that is the question.\n"); printf("brevity is the soul of wit.\n --Shakespeare\n"); 주석 comment comment 는 /* 으로시작하고 */ 으로끝남. /* This is a comment */ 주석은프로그램내에어디든나타날수있음여러줄에걸쳐서또는한줄에도나올수있음 한줄이상걸치는주석 /* Name: pun.c Purpose: Prints a bad pun. Author: K. N. King */ C99 표준에서는한줄짜리주석을위해 // 을사용함 // A comment, which ends automatically at the end of a line // 의장점 : 안전함 : 한줄만주석되기때문에실수를줄여줌 여러줄을 // 로주석처리할때가독성이좋음 more on printf on following section 7 8
Variables and Assignment 변수와할당 프로그램이데이터를임시로저장할수있어야함 임시로저장할수있는공간이변수 variables. 변수와할당을사용하려면다음을알아야함 1. Type 형 / 타입 2. Declaration 선언. Initialization 초기화 1 2 int height = 18; Variables and Assignment: 형 / 타입 모든변수는 type 이있어야함 C 에는여러형이있음그중몇가지는 int 와 float. int(integer 의약어 ) 형은정수를저장함예 :0, 1, 92, or 255. float(short for floating-point 의약어 ) 형은 int 형보다더큰수를표현 float 형변수는소수점도저장할수있음예 :79.125. float 변수의단점 : 연산이늦음 float 정밀하지않음 9 10 Variables and Assignment: Declarations 선언 변수는먼저 declared 선언된후사용 다음과같이사용하는것이가능하다 int height; float profit; int height, length, width, volume; float profit, loss; main 에선언문들이포함되어있다면이를활용하는문장들보다앞에있어야함 int main(void) { declarations statements } Variables and Assignment: 할당 (1/2) 변수는할당 (assignment) 을통해값을갖게됨 : height = 8; // 숫자 8은상수 변수에값을할당하거나사용하기전에는먼저선언되어야함 float 형변수는소수점단위까지저장함 profit = 2150.48; 소수점단위의상수뒤에f 를붙여서float 변수에저장하는것이좋음 : profit = 2150.48f; 어떤컴파일러는f 가없으면경고메시지를출력함 11 12
Variables and Assignment: 할당 (2/2) int 형변수는정수를저장하고 float 형변수는실수를저장함 형을섞어서쓰는것은가능하지만, 안전하지않음 ( 예,int 값을 float 변수에할당하기 ) Variables and Assignment: Initialization 초기화 어떤변수들은자동으로 0 으로초기화되지만, 대부분그렇지않다 기본값이없는변수인경우그리고할당되지않은변수를 uninitialized. 초기화안됨이라고표현함 변수에값이할당되면연산식에사용될수있음 height = 8; length = 12; width = 10; volume = height * length * width; // volume is now 960 할당자우변은식이올수있음. 표현식에는상수, 변수, 연산자들로구성됨 초기화안된변수를쓰면예상치못하는결과를얻게됨 어떤컴파일러들에서는프로그램이멈추는경우도생김 초기화과정을선언에포함시킬수있음 int height = 8; // The value 8 is said to be an initializer. int height = 8, length = 12, width = 10; int height, length, width = 10; // initializes only width 1 14 변수의값출력하기 printf 를사용하여변수의현재값을출력할수있음 아래와같이출력하기위해printf를호출하려면 : Height: h printf("height: %d\n", height); %d 는height 의값이표현될위치를표시하는형식지정자 입력값읽기 scanf 는 printf 의형제와같은입출력라이브러리함수이다. scanf 는어떤형의값을저장할수있는지나타내는형식지정자가필요 scanf 가 int 형값을읽는예 : scanf("%d", &i); /* reads an integer; stores into i */ & 심볼은 scanf를쓰는데쓰임. 하나의 printf 문장에표현될수있는변수의개수에제한없음 : printf("height: %d Length: %d\n", height, length); Details of printf on following section 15 Details of scanf on following section 16
상수에이름부여하기 매크로정의기능을사용하여상수에이름을부여가능 : #define INCHES_PER_POUND 166 매크로이름은대문자로쓰는것이관용적 프로그램이컴파일되면전처리기가매크로가사용된곳을숫자로치환함 전치리과정에서다음과같은문장은 weight = (volume + INCHES_PER_POUND - 1) / INCHES_PER_POUND; 다음과같이바뀜 weight = (volume + 166-1) / 166; Identifiers 식별자 Identifiers 식별자 : 변수, 함수, 매크로와다른여러것들의이름 문자, 숫자, 밑줄이허용되지만, 숫자또는밑줄만첫글자로쓸수있음 : times10 _done symbol_table current_page C 식별자의글자수는제한없음 쓰면안되는식별자의예 : 10times get-next-char symboltable currentpage 매크로의값이수식일수도있음 : #define RECIPROCAL_OF_PI (1.0f /.14159f) 단, 연산자가있는경우괄호로묶어야함 C 대소문자구분 job job job job Job JoB JOb JOB all are different 17 18 Keywords Layout of a C Program (1/2) 아래의 keywords 는식별자로쓸수없음 : auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while 키워드는 ( 예외 _Bool, _Complex, _Imaginary) 모두소문자로만쓸수있음. 라이브러리함수의이름 (e.g., printf) 역시소문자임 inline* restrict* _Bool* _Complex* _Imaginary* *C99 only C 프로그램은 tokens 으로이루어짐. 토큰은 : Identifiers 식별자 Keywords 키워드 Operators 연산자 Punctuation 구두점 Constants 상수 String literals 문자 다음문장은 printf("height: %d\n", height); 7 개의토큰으로이루어짐 : printf Identifier ( Punctuation "Height: %d\n" String literal, Punctuation height Identifier ) Punctuation ; Punctuation 19 20
Layout of a C Program (2/2) 하나의문장은여러줄로나뉠수있음 토큰사이의공백 ( 연산자앞뒤의공백, 쉼표뒤의공백등 ) 은사람이읽기편하라고존재. Indentation 들여쓰기는중첩문장들을읽기쉽게해줌 Blank lines 빈줄은프로그램을논리적으로구성하는데용이함 21