의미를 모르고 써왔던 main 함수에 대해서 알아보자. make나 clang과 같은 프로그램을 실행할 때 컴파일 후 저장하고자 하는 파일명과 같이 추가적인 정보를 함께 줄 수 있었다. 이런 정보들을 명령행 인자라고 한다. 내가 작성한 프로그램에서는 main 함수에서 명령행 인자를 받을 수 있도록 설계할 수 있다. C로 작성된 프로그램을 실행할 때 프로그램 뒤에 단어를 입력하면, 그 단어들은 argv라는 배열에 들어가게 된다. argc는 입력의 개수, argv[]는 입력이 포함된 배열을 의미한다. argv[0]은 기본적으로 프로그램의 이름이 저장된다. argv[1]은 프로그램 이름 뒤에 하나의 입력이 추가된다면 그것이 저장될 것이다. 만약 프로그램 이름 뒤에 즉, 명령행 인자에 David를 입력했다면 ar..
문자열의 길이 및 탐색 문자열의 끝을 알 수 있는 방법은 무엇일까? 인덱스 문자가 널 종단 문자와 일치하는지를 비교할 수도 있겠지만 라이브러리의 strlen 함수를 이용하는 것이 좋다. strlen은 문자열의 길이를 알려주는 함수이다. 문자열의 탐색 및 수정 소문자를 대문자로 바꾸는 방법은 무엇일까? 첫번째 방법은 ASCII 코드를 찾아서 소문자와 대문자의 차이가 32이므로 소문자 - 32를 해서 출력한다. 이미 대문자라면 그대로 출력한다. #include #include #include int main(void) { string s = get_string("Before: "); printf("After: "); for (int i = 0, n = strlen(s); i < n; i++) { if (s[..
문자열은 문자들의 배열이다. string s = "HI!" 라면, 이는 문자의 배열이므로 메모리에 H,I,!,\0 과 같이 저장되고 인덱스로 각 문자에 접근할 수 있다. \0은 널 종단 문자로 문자열의 끝을 나타낸다. (모든 비트가 0인 1바이트를 의미) 따라서 모든 문자열의 바이트는 실제 바이트보다 +1이 된다. string names[4]; names[0] = "EMMA"; names[1] = "RODRIGO"; names[2] = "BRIAN"; names[3] = "DAVID"; printf("%s\n", names[0]); printf("%c%c%c%c\n", names[0][0], names[0][1], names[0][2], names[0][3]); 위의 %c의 경우 2차원 배열로 문자에 접..
전역변수 scores 배열의 크기인 3을 N이라는 전역변수로 선언해주었다. 이 변수가 고정된 값(상수)라면 앞에 const를 붙여준다. 관습적으로 전역변수는 대문자를 쓴다. #include #include const int N = 3; int main(void) { // 점수 배열 선언 및 값 저장 int scores[N]; scores[0] = 72; scores[1] = 73; scores[2] = 33; // 평균 점수 출력 printf("Average: %i\n", (scores[0] + scores[1] + scores[2]) / N); } 배열의 동적 선언 및 저장 배열의 크기와 배열의 인덱스 값을 사용자로부터 동적으로 입력받아 저장한다. #include #include float averag..
자료형에 따라 메모리를 차지하는 크기가 다음과 같다. bool: 불리언, 1바이트 char: 문자, 1바이트 int: 정수, 4바이트 float: 실수, 4바이트 long: (더 큰) 정수, 8바이트 double: (더 큰) 실수, 8바이트 string: 문자열, ?바이트 배열 같은 자료형의 데이터를 메모리상에 연이어 저장하고 이를 하나의 변수로 관리하기 위해 사용 같은 자료형의 묶음 #include #include int main(void) { // Scores int scores[3]; scores[0] = 72; scores[1] = 73; scores[2] = 33; // Print average printf("Average: %i\n", (scores[0] + scores[1] + scores[..
버그: 코드에 있는 오류 디버깅: 버그를 식별하고 고치는 과정 버그의 유래 버그는 Grace Hopper라는 컴퓨터 과학자가 Mark2라는 시스템을 만들 때 벌레가 들어가서 작동을 방해했다는 일화에서 유래되었다고 한다. 즉 버그는 의도하지 않은 프로그램 내 실수를 의미한다. help50 에러메세지가 뜨고 이를 이해하기 어려우면 help50 make 파일이름 으로 실행하면 컴파일할 때 생기는 오류를 해석해준다. debug50 에러메세지는 뜨지 않는데 내가 원하는 대로 실행이 되지 않을 때가 있다. 그럴 때는 CS50 IDE에서 debug50 파일명으로 실행하면 디버거를 사용할 수 있다. 디버거에서 변수를 확인하거나 브레이크 포인트를 지정해서 코드를 한 줄 씩 실행해볼 수 있다. 출처 : www.boostc..
컴파일링의 단계는 총 4단계로 이루어진다. ① 전처리(Precompile) ② 컴파일(Compile) ③ 어셈블(Assemble) ④ 링크(Link) ① 전처리(Precompile) #으로 시작되는 코드는 전처리기에 의해 실질적인 컴파일이 이루어진다. 프로그램의 소스 코드가 #include 파일과 같은 줄을 포함하면, 해당 파일의 실제 코드로 대체된다. 예를 들면, #include 대신에 clang이 이 stdio.h 파일에 직접 들어가 내가 작성한 파일 내의 해당되는 코드를 가져와서 대체한다는 것이다. ② 컴파일(Compile) 컴파일러는 C 코드를 어셈블리어라는 저수준 프로그래밍 언어로 컴파일한다. C 코드를 어셈블리 코드로 변환시켜줌으로써 컴퓨터가 이해할 수 있는 언어의 프로그램으로 만들어 준다. ..
- Total
- Today
- Yesterday
- form
- CSSOM
- 구조체
- 포인터
- 함수
- 동기처리
- 문자열
- 프로젝트
- valgrind
- 비구조화할당
- CSS
- vanillajs
- RenderTree
- float
- Dom
- sr-only
- intersectionObserver
- 선택자
- 선형검색
- 구조분해할당
- 폼
- capturing
- Big Ω
- HTML
- 이벤트위임
- overflow
- pseudo
- Typography
- 연결리스트
- malloc
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |