#noindex [[C_Books]] - [[책,book]] { Learn C the Hard Way 깐깐하게 배우는 C Zed_Shaw Naver:"Learn C the Hard Way" Ggl:"Learn C the Hard Way" https://learncodethehardway.org/c/ } ---- Sub: [[광역_문자,wide_character]] - rename [[광역_문자열,wide_string]] - rename [[형식_문자열,format_string]] - rename [[연산자,operator]] { [[피연산자,operand]]를 계산 [[VG:곱셈,multiplication]]을 예로 들면, 승수(multiplier) and 피승수(multiplicand) 관련: 선행(precedence) - Forouzan번역서의 용어.. '우선'? 결합성(associativity) } [[__func__]] { C99의 미리 정의된 명칭(predefined identifier)중 하나. 각 함수 정의를 시작하는 중괄호 다음에 아래와 같은 선언이 있는 것처럼 암시적으로 선언된다. {{{ static const char __func__[] = "함수 이름"; }}} 따라서 다음과 같이 디버깅 시 현재 실행 중인 함수의 이름을 출력하는 데 쓸 수 있다. {{{ if (failed) printf("Function %s failed\n", __func__); }}} (C: A Reference Manual 번역서 p. 48) } [[memory_safety]]의 부재 // 메모리 안전성 그래서 필요한 [[valgrind]] =,valgrind =,valgrind . valgrind { Naver:valgrind Ggl:valgrind } // valgrind [[TableOfContents]] = 표준 헤더 파일 = C header_file [[ctype.h]] [[stddef.h]] [[limits.h]] [[math.h]] { https://everything2.com/title/math.h } [[string.h]] { } [[iso646.h]] { 특정 연산자를 위한 매크로 제공 and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq https://everything2.com/title/iso646.h rel https://everything2.com/title/ISO-646 "ISO-646 was the first attempt to standardize an [[international_character_set]] { international character set Ggl:"international character set" Naver:"international character set" "international character set" }. ..." } [[stdbool.h]] { https://everything2.com/title/stdbool.h } = scanf() = 값을 성공적으로 읽었으면 1, 읽지 못했으면 (%d로 숫자를 읽으려 했는데 문자가 입력되었거나 하면) 0을 돌려줌. scanf의 리턴 값 scanf는 값을 돌려주는데 이것이 [[EOF]]인지 검사할 수 있다. {{{ while(scanf("%d", &var) != EOF) { ... } }}} 처럼 값을 계속해서 읽는 데 쓸 수 있다. = assert() = assert.h NDEBUG 매크로가 정의되었다면 assert는 무시됨 (일일히 삭제하는 것보다 간편) = C에서 난수 생성하기 = 난수 생성기는 [[stdlib.h]] 필요. 종자로 난수 생성하기 { srand(seed random number) 함수를 사용. 프로토타입은 {{{void srand(unsigned int seed);}}} 먼저 srand(time(NULL)); 을 호출. time()은 [[time.h]] 필요. 또는 어떤 정수를 넣어 호출. 일반적으로 [[VG:소수,prime_number]]를 종자로 쓰면 더 좋은 난수열이 나온다. rand()는 0에서 RAND_MAX 사이의 pseudorandom integer를 반환. 프로토타입은 {{{int rand(void);}}} RAND_MAX는 적어도 32767임. 이제 0..50 범위의 수를 추출하려면, rand() % 51을 사용하면 됨. 최소..최대 범위를 지정하려면, rand() % ((max + 1) - min) + min 식을 사용하면 됨. } = rand, rand48, drand48 = stdlib.h 구간 [0, RAND_MAX] 사이에 있는 값을 반환. VC++ 2010의 경우 RAND_MAX==32767임. > 대부분의 Unix시스템은 rand48계열의 난수 생성 함수를 제공한다. > drand48()은 [0, 1] 사이의 불규칙적인 실수를 생성. > lrand48()은 [0, 2^^31^^−1]사이의 불규칙적인 정수를 생성. 이라고 (C by Dissection 4e, 분석적 접근 방법, Al Kelley, Ira Pohl 저, 7명 공역)나와 있는데 VC++ 2010에서는 안되는군. linux전용인지 CHK = 윤년 여부 결정 C 식 = {{{ (!(year % 4) && (year % 100)) || !(year % 400) }}} = C 문자 입출력 함수 = ||getchar, putchar ||표준 입출력 스트림이 대상 || ||getc, fgetc, putc, fputc ||파일 포인터가 필요 || ||ungetc ||파일 스트림에서만 사용 || = C언어에서 수행시간을 측정하는 방법 = [[시간,time]] [[clock]] 초 단위로. == 방법 1 == {{{ #include start = clock(); ... stop = clock(); double duration = (double)(stop - start) / CLOCKS_PER_SEC; }}} == 방법 2 == {{{ #include start = time(NULL); ... stop = time(NULL); double duration = (double) difftime(stop, start); }}} = 메모리 관련 api/함수들 = [[메모리,memory]] ... = bmks en = Ben Pfaff: C Frequent Answers https://benpfaff.org/writings/clc/index.html ---- See also [[CPlusPlus언어]] Twin https://hut.mearie.org/c-language/ { [[Date(2023-12-09T20:21:32)]] 대충 봄, 내 summary C는 * 높은 이식성 * 충분한 저수준 - 이 둘이 충돌하여 undefined_behavior 를 C99에서 새로 만들어 내기도 하였다. 이 둘은 trade-off 관계라 둘 다 완전히 없어질 일은 없을 것으로 보인다.''(아마 언어 자체가 backward compatibility를 포기하지 않는 이상은. - 그럴 일이 없지만.)'' * [[모듈,module]] [[라이브러리,library]]를 지원하는 [[패키지관리자,package_manager]]가 없다 그래서 single file library with minimal dependencies도 인기가 좋다. (그 중 public domain/open source 목록: https://github.com/nothings/single_file_libs ) } http://tunes.org/cliki/c_20language.html RENAMETHISPAGE