make나 clang을 사용해서 프로그램을 실행할 때 거치는 단계
- 전처리
- 컴파일링
- 어셈블링
- 링킹
전처리기에 의해 수행
#
로 시작하는 소스코드 -> 실질적인 컴파일이 이루어지기 전에 무언가를 실행하라고 알려줌
C 코드를 어셈블리어라는 저수준 프로그래밍 언어로 컴파일
어셈블리 코드를 오브젝트 코드로 변환(머신코드_연속된 0과 1들로 )
여러 개의 다른 오브젝트 코드 파일을 실행 가능한 하나의 오브젝트 코드 파일로 합쳐주기.
프로그램이 라이브러리 처럼 여러 파일로 이루어져있으면 이 작업 필요
여러 사람들이 코드를 작성하기 때문에 서로 불필요한 오해를 없애고, 코드를 이해하는 데 드는 비용을 최소화하기 위해 특정 스타일 가이드 따라야 함
자료형 별로 서로 다른 크기 메모리 차지
bool: 불리언, 1바이트
char: 문자, 1바이트
int: 정수, 4바이트
float: 실수, 4바이트
long: (더 큰) 정수, 8바이트
double: (더 큰) 실수, 8바이트
string: 문자열, ?바이트
int main(void)
{
// Scores
int scores[3];
scores[0] = 72;
scores[1] = 73;
scores[2] = 33;
}
#include <cs50.h>
#include <stdio.h>
float average(int length, int array[]);
int main(void)
{
// 사용자로부터 점수의 갯수 입력
int n = get_int("Scores: ");
// 점수 배열 선언 및 사용자로부터 값 입력
int scores[n];
for (int i = 0; i < n; i++)
{
scores[i] = get_int("Score %i: ", i + 1);
}
// 평균 출력
printf("Average: %.1f\n", average(n, scores));
}
//평균을 계산하는 함수
float average(int length, int array[])
{
int sum = 0;
for (int i = 0; i < length; i++)
{
sum += array[i];
}
return (float) sum / (float) length;
}
string.h와 ctype.h의 라이브러리의 함수 확인 및 활용
strlen
문자열의 길이를 알려주는 함수명령행 인자 : commend line argument. 프로그램 뒤에 단어를 적으면 그 단어 바로 사용하게.
명령행 인자를 사용하면 고정된 출력 값이 아니라 동적인 출력값을 표현 할 수 있습니다
main 함수는 return 값을 정해주지 않으면 0을 리턴.(문제가 없다는 뜻.)
#include <cs50.h>
#include <stdio.h>
int main(int argc, string argv[])
{
if (argc == 2)
{
printf("hello, %s\n", argv[1]);
}
else
{
printf("hello, world\n");
}
}
=======================================================
C언어 함수, 배열, 명령어 인자 이해