elevne's Study Note
C 공부 (2: 반복문, static) 본문
C 언어에서도 Java 와 동일한 방식으로 while 문을 사용하여 반복문을 구현할 수 있다.
#include <stdio.h>
int main() {
int num = 0;
while (num <= 10) {
printf("HI \n");
num++;
}
}
반복문의 내용을 최소 한 번 이상 실행시키기 위해서 단순 while 문 대신에 do while 을 사용할 수도 있다.
#include <stdio.h>
int main() {
int num = 0;
do {
printf("HI \n");
num++;
} while (num <= 10);
}
for 반복문도 Java 와 동일한 문법으로 작성하여 사용할 수 있다.
#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
printf("HI\n");
}
}
if 문의 경우도 마찬가지이다. (아래 코드에서는 작성하지 않았지만 당연히 else if 도 사용 가능하다. 그 외에도 switch/case 문도 사용 가능하다)
#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
if (i > 4){
printf("4보다 큼\n");
} else {
printf("4보다 작음\n");
}
}
}
삼항연산자도 아래와 같이 사용 가능하다.
#include <stdio.h>
int main() {
int i = 0;
int j = 1;
int k = (i > j) ? i : j;
printf("%d", k);
}
함수를 작성하는 방법도 (이전 글에서 알아보았던 것처럼) Java 와 매우 유사하다. 반환값이 없으면 함수 앞에 void 를 붙여주고, 있을 때에는 반환 값의 자료형을 붙여준다.
#include <stdio.h>
int Add(int num1, int num2){
return num1 + num2;
}
void showAddResult(int num){
printf("Add Result: %d\n", num);
}
int ReadNum(){
int num;
scanf("%d",&num);
return num;
}
void HowTo(){
printf("Write Two input integers to add");
}
int main() {
int result, num1, num2;
HowTo();
num1 = ReadNum();
num2 = ReadNum();
result = Add(num2, num1);
showAddResult(result);
return 0;
}
이 때, 사용하는 함수는 호출되기 전에 미리 정의되어 있어야 한다. 함수의 선언만 위에서 하고 함수의 정의를 밑에서 다시 해주는 방법도 사용이 가능하다. 아래와 같이 바꿔줄 수 있는 것이다.
#include <stdio.h>
int Add(int, int);
void showAddResult(int);
void HowTo();
int ReadNum();
int main() {
int result, num1, num2;
HowTo();
num1 = ReadNum();
num2 = ReadNum();
result = Add(num2, num1);
showAddResult(result);
return 0;
}
int Add(int num1, int num2){
return num1 + num2;
}
void showAddResult(int num){
printf("Add Result: %d\n", num);
}
int ReadNum(){
int num;
scanf("%d",&num);
return num;
}
void HowTo(){
printf("Write Two input integers to add");
}
또, 함수 내에서 지역변수를 사용할 때 static 선언을 사용할 수 있다. 본래 지역변수는 선언된 함수 내에서만 접근이 가능하고, 함수 내에 선언된 지역변수는 해당 함수가 반환하면 소멸된다. 하지만, static 선언을 사용하게 되면, 여전히 해당 지역변수는 선언된 함수 내에서만 접근 가능하긴 하지만, 딱 1 회 초기화되고 프로그램 종료 시까지 메모리 공간에 존재하게 된다. (전역변수의 특징을 갖게되는 것) 아래 코드로 확인해볼 수 있다.
#include <stdio.h>
void SimpleFunc(){
static int num1 = 0;
int num2 = 0;
num1++, num2++;
printf("static: %d, local: %d \n", num1, num2);
}
int main() {
for (int i = 0; i < 10; i++){
SimpleFunc();
}
return 0;
}
static 변수는 매우 쉽게 전역변수로 대체가 가능하기는 하지만, 전역변수보다 안정적이다. 전역변수와 마찬가지로 프로그램이 종료될 때까지 메모리 공간에 남아있지만 접근할 수 있는 범위를 하나의 함수로 제한했기 때문이다.
또, 지역변수에는 static 말고 register 선언을 붙여줄 수도 있다. register int num = 3; 과 같은 형태로 작성해주는 것인데, 이처럼 선언된 변수 num 은 CPU 내에 존재하는 레지스터라는 메모리 공간에 저장될 확률이 높아지게 되는 것이다. 레지스터는 CPU 내에 존재하는 크기가 작은 메모리로, CPU 내에 존재하기에 이 메모리에 저장된 데이터를 대상으로 하는 연산은 매우 빠르게 이루어진다고 한다.
Reference:
윤성우의 열혈 c 프로그래밍
'Backend > C' 카테고리의 다른 글
C 공부 (6: Call by reference) (1) | 2023.03.07 |
---|---|
C 공부 (5: 포인터(2)) (0) | 2023.02.03 |
C 공부 (4: 포인터(1)) (0) | 2023.01.29 |
C 공부 (3: 배열) (1) | 2023.01.28 |
C 공부 (1: ~ Casting) (0) | 2023.01.26 |