《C 와 지침》에 관 한 학습 노트.
제 1 장
저 자 는\#if 0...\#endif 를 사용 하 는 것 이/*와*/를 사용 하 는 것 보다 낫다 고 생각 합 니 다.후 자 는 끼 워 넣 을 수 없 기 때 문 입 니 다.그러나//에 대해 서 는 설명 하지 않 았 다.
제2 장
세 글자 단 어 는 두 개의 물음표 에 하나의 기 호 를 더 해서 다른 기 호 를 나타 내 는데 전의 문자 와 비교적 유사 하 다.일부 자 료 를 찾 아 보 았 는데,그것 의 사용 은 컴 파 일 러 와 관련 이 있 으 며,이해 하면 문자열 의 상수 가 잘못 해석 되 는 것 을 방지 할 수 있다.
??( ==> [ ??< ==> { ??= ==> #
??) ==> ] ??> ==> } ??/ ==> \
??! ==> | ??' ==> ^ ??- ==> ~
깊이 박 힌 함수 에 대해 저 자 는 Tab 를 너무 많이 들 이지 않도록 몇 가지 함수 로 나 누 어 실현 할 것 을 건의 합 니 다.제3 장 데이터
static 의 복잡 한 용법 에 대해 함수 정의 나 코드 블록 이외 의 변수 성명 에 사용 할 때 static 는 식별 자의 연결 속성 을 수정 하고 외부 에서 internal 로 바 꾸 지만 식별 자의 저장 유형 과 역할 영역 은 영향 을 받 지 않 습 니 다.이러한 방식 으로 설명 하 는 함수 나 변 수 는 원본 파일 에 만 접근 할 수 있 습 니 다.코드 블록 내부 의 변수 성명 에 사 용 될 때 static 는 변수의 저장 형식 을 수정 하고 자동 변수 에서 정적 변수 로 변경 하지만 변수의 링크 속성 과 역할 영역 은 영향 을 받 지 않 습 니 다.이러한 방식 으로 설명 하 는 변 수 는 프로그램 이 실행 되 기 전에 만 들 고 프로그램의 전체 실행 기간 에 존재 합 니 다.코드 블록 이 실 행 될 때마다 만 들 지 않 고 코드 블록 이 실 행 된 후에 소각 합 니 다.
제5 장 조작 부호 와 표현 식
이동 동작,이동 하 는 자릿수 가 마이너스 일 때 구체 적 인 결 과 는 컴 파일 러 와 관련 되 거나 정의 되 지 않 은 것 입 니 다.예 를 들 어 a<<-5 는 왼쪽 에서 27 비트 를 이동 할 수 있 습 니 다.
a+=1 의 조작 효율 은 a=a+1 보다 높 고 등가 의 a[2*(y-6*f(x))]=a[2*(y-6*f(x))]+1 은 a[2*(y-6*f(x)]+=1 에 비해 후 자 는 중복 계산 하지 않 아 도 된다.
sizeof x 의 형식 은 허용 된다.sizeof()는 표현 식 에 값 을 구하 지 않 기 때문에 sizeof(a=b+1)의 a 는 할당 되 지 않 았 습 니 다.
구 조 를 가리 키 는 포인터 의 구성원 에 게 접근 할 때->만 사용 합 니 다.
제6 장 지침
초기 화 되 지 않 은 지침 은 오 류 를 일 으 킬 수 있 습 니 다.int *a; *a=12,이것 은 a 가 가리 키 는 주소 의 내용 을 수정 하고 결 과 는 예측 할 수 없습니다.
저 자 는 검색 요소 와 같이 찾 지 못 했 을 때 값 을 NULL 포인터 로 되 돌려 주 는 것 은 C 의 일반적인 기술 이지 만 소프트웨어 공학 의 원칙 에 어 긋 난다 고 생각 합 니 다."하나의 값 으로 두 가지 다른 뜻 을 나타 내 는 것 은 위험한 일 입 니 다.앞으로 어떤 것 이 진정한 의도 인지 알 수 없 기 때 문 입 니 다."안전 한 정책 은 두 개의 값 을 되 돌려 주 는 것 입 니 다.성공 적 인 상태 값 과 성공 적 으로 찾 았 을 때 찾 은 요소 값 을 표시 합 니 다.
제7 장 함수
인자 가 없 는 함수 원형 성명 은 다음 과 같이 작성 해 야 합 니 다:int func(void);구식 스타일 성명 과 혼동 하지 않 는 것 이 목적 이다.
재 귀 해결 문 제 는 비 재 귀 보다 더욱 뚜렷 하고 복잡 한 문제 에 대해 교체 형식 으로 실현 하기 어 려 울 때 재 귀 실현 의 간결 성 은 그 가 가 져 온 비용 을 보상 할 수 있다.Fibonacci 는 흔히 볼 수 있 는 재 귀적 인 예 이지 만 불필요 한 계산 이 많 고 씀 씀 이 가 너무 커서 실제 적 으로 반복 적 으로 실현 하 는 것 보다 못 하 다.4567913)가 변 매개 변수 목록 의 사용:헤더 파일 stdarg.h,그 중에서 하나의 유형 valist 와 세 개의 매크로 바start、va_arg、va_end。성명 을 통 해 valist 형식의 변 수 는 이 매크로 와 함께 사용 되 며,매개 변수의 값 에 접근 합 니 다.함수 가 var 를 설명 하 였 습 니 다.arg 의 변 수 는 매개 변수 목록 의 미 확정 부분 에 접근 하 는 데 사 용 됩 니 다.vastart 초기 화.첫 번 째 매개 변 수 는 valist 변수의 이름,두 번 째 매개 변 수 는 생략 번호 앞의 마지막 이름 이 있 는 매개 변수 입 니 다.초기 화 과정 에서 vararg 변 수 는 가 변 매개 변수 부분의 첫 번 째 매개 변 수 를 가리킨다.va_arg 는 두 개의 인 자 를 받 아들 입 니 다:valist 와 매개 변수 목록 의 다음 매개 변수 형식 입 니 다.va_arg 매개 변수의 값 을 되 돌려 주 고 vararg 는 다음 가 변 매개 변 수 를 가리 키 고 있 습 니 다.방문 완료 호출 vaend。
Fibonacci
long fibonacci(int n)
{
long result;
long previous_result;
long next_older_result;
result = previous_result = 1;
while( n > 2) {
n -= 1;
next_older_result = previous_result;
previous_result = result;
result = previous_result + next_older_result;
}
return result;
}
가 변 적 인 매개 변수의 매크로 는 매개 변수 수량 과 매개 변수 유형 을 판단 하지 못 하고 후 자 는 결 성 된 매개 변수 유형 을 향상 시 킬 수 있다.이 두 가지 문 제 를 해결 하 는 방법 은 이름 을 가 진 매개 변 수 를 사용 하 는 것 입 니 다.즉,가 변 매개 변수 목록 에 이름 이 있 는 매개 변수 가 있 는 이유 입 니 다.제8 장 수조
int array[10];int *ap =array+2;그 후에 ap[0]은 C 에서 합 법 적 이 고 array[2]와 같 으 며 ap[-1]역시 합 법 적 인 것 이다.즉,array[1]이다.
포인터 가 배열 보다 효율 적 인 경우:for 순환 의 ap++는 순환 체 중의 array[a]=0 보다 효율 적 이 고 전자의 곱셈 계산 은 한 번 뿐 이 며 1 은 데이터 형식 길이 와 곱 하고 후 자 는 매번 계산 해 야 한다.
#include <stdarg.h>
float average( int n_values, ... )
{
va_list var_arg;
int count;
float sum = 0;
/* */
va_start( var_arg, n_values) ;
/* */
for (count = 0; count < n_values; count += 1) {
sum += va_arg( var_arg, int);
}
/* */
va_end(var_arg);
return sum/n_values;
}
배열,특히 방대 한 배열 의 초기 화 시간 이 상당 할 수 있 으 므 로 배열 의 초기 화 부분 이 하나의 함수 나 코드 블록 에 있 을 때 프로그램 이 매번 초기 화 하 는 것 이 가치 가 있 는 지 를 고려 해 야 한다.그렇지 않 으 면 배열 을 static 로 설명 합 니 다.다 차원 배열 에 포인터 로 접근 하 는 방법,예 를 들 어 배열 int matrix[3][10]에 대해 int*mp=matrix 는 잘못된 것 입 니 다.matrix 는 정형 을 가리 키 는 지침 이 아니 라 정형 배열 을 가리 키 는 지침 이기 때 문 입 니 다.int(*p)[10]=matrix 는 가능 합 니 다.p 는 matrix 첫 줄 을 가리 키 며 배열 에 대한 한 줄 한 줄 방문 을 실현 합 니 다.하나하나 접근 할 필요 가 있 으 면 int*pi=&matrix[0]또는 int*pi=matrix[0]를 사용 하여 첫 번 째 요 소 를 가리 키 도록 합 니 다.int(*p)[]=matrix;정확 하지 않 습 니 다.빈 배열 의 길이 에 따라 값 을 조정 합 니 다.이 잘못된 컴 파일 러 는 포착 할 수 없습니다.함수 전달 매개 변수 유사.
다 차원 배열 의 명시 적 초기 화 는 1 차원 만 추산 할 수 있 고 다른 차원 은 생략 할 수 없다.
제9 장 문자열,문자,바이트
기호 가 없 는 신중 한 사용:strlen 은 기호 가 없 는 수 를 되 돌려 줍 니 다.따라서 if(strlen(x)-strlen(y)>=0)는 영원히 진실 입 니 다.이 경우 if(strlen(x)>=strlen(y)로 쓰 거나 강제 형식 으로 int 로 변환 해 야 합 니 다.
strtok 는 처리 하 는 함수 의 부분 상태 정 보 를 저장 하기 때문에 두 문자열 을 동시에 해석 할 수 없습니다.
문자열 함수 가 NULL 바이트 가 끝 났 습 니 다.문자열 이 아 닌 데 이 터 를 처리 하려 면 이 제한 을 받 지 않 고 다른 함수:memcpy,memmove,memcmp,memchr,memset 를 사용 할 수 있 습 니 다.
제10 장 구조 와 연합
매개 변 수 는 구조의 함수 로 전달 지침 이 전달 값 호출 보다 효율 적 이다.이것 은 후자 가 구조의 복사 본 을 만들어 야 하기 때문이다.f(type_struct *s){s->x};호출 은 f(&s)입 니 다.이 구조의 구성원 에 대한 접근 횟수 가 3 회 를 넘 으 면 레지스터 변수 로 설명 하 는 것 이 더 효과 적 입 니 다.부적 절 한 수정 을 피하 기 위해 서 는 매개 변 수 를 const 로 설명 하고 원래 구조(또는 구성원)에 게 반환 값 을 부여 할 수 있 습 니 다.
비트 세그먼트 는 간단하게 이 해 했 을 뿐 구성원 의 길 이 를 지정 한 특수 한 구조 이다.
제1 3 장 고급 지침 화제
리 셋 함수 의 사용 은 비교적 불분명 한 유형의 데이터 와 유사 한 문 제 를 해결 할 수 있 으 며,여기 서도 처음으로 리 셋 함 수 를 체계적으로 인식 하 게 되 었 다.
제1 4 장 예비 프로세서
다 중 포 함 된 위험 을 제거 하 는 방법 은 각 헤더 파일 에 다음 과 같은 내용 을 기록 합 니 다.
/* */
int array[10], a;
for ( a = 0 ; a< 10; a +=1 )
array[a] = 0;
/* */
int array[10], *ap;
for ( ap = array ; ap< array + 10; ap ++ )
*ap = 0;
처음 포 함 될 때HEADRNAME_H 는 1 로 정의 되 며 다시 포 함 될 때 무 시 됩 니 다.그것 을 써 서 라 도\#defineHEADRNAME_H 는 다 돼.그러나 가능 한 한 다 중 포함 은 피해 야 한다.제1 5 장 입 출력 함수
freopen 은 특정한 파일 흐름 을 열 거나 다시 열 때 사용 합 니 다.원형:FILE*freopen(char const*filename,char const*mode,FILE*stream).그 중에서 마지막 매개 변 수 는 열 어야 할 흐름 입 니 다.이 스 트림 을 먼저 닫 고 지정 한 파일 과 모드 로 이 스 트림 을 다시 열 려 고 했 으 나 NULL 로 돌아 가지 못 하고 세 번 째 인 자 를 성공 적 으로 되 돌려 주 었 습 니 다.
ungetc 는 이전에 읽 은 문 자 를 흐름 으로 되 돌려 나중에 다시 읽 을 수 있 도록 합 니 다.C 프로 그래 밍 언어>에 문자 처리 의 예 가 있 습 니 다.여기 서 복습 하 겠 습 니 다.fseek,fsetpos 또는 rewind 가 흐 르 는 위 치 를 바 꿀 때 모든 반 환 된 문 자 는 버 려 집 니 다.
gets 와 puts 와 fgets 와 fputs 의 차 이 는 gets 가 한 줄 의 입력 을 읽 을 때 버퍼 에 끝 에 있 는 줄 바 꿈 자 를 저장 하지 않 고 puts 가 문자열 을 쓸 때 문자열 을 쓴 후에 출력 에 줄 바 꿈 자 를 추가 하 는 것 입 니 다.또한 gets 는 버퍼 길 이 를 판단 하지 않 아 위험 합 니 다.
feof 는 흐름 이 파일 끝 에 있 는 지,ferror 보고 흐름 의 오류 상 태 를 판단 하고 clearr 는 지정 한 흐름 의 오류 표 지 를 초기 화 합 니 다.
tmpfile 에서 데 이 터 를 저장 하 는 임시 파일 을 만 들 면 프로그램 이 끝 날 때 삭 제 됩 니 다.임시 파일 의 이름 은 tmpnam 에서 만 듭 니 다.
제1 6 장 표준 함수 라 이브 러 리
volatile 은 형식 수정자 로 서로 다른 스 레 드 에 접근 하고 수 정 된 변 수 를 수식 하여 컴 파일 러 가 프로그램의 의 미 를 수정 할 수 있 는 방식 으로'최적화'프로그램 을 막 도록 설계 되 었 다.
vprintf,vfprintf,vsprintf 는 가 변 매개 변수 목록 을 인쇄 하 는 데 사용 되 며,기능 은 대응 하 는 printf 등 함수 와 유사 하지만,매개 변 수 는 가 변 매개 변수 목록 arg 입 니 다.
getenv 는 환경 변 수 를 가 져 옵 니 다.찾 으 면 포인터 로 되 돌려 줍 니 다.그렇지 않 으 면 NULL 로 돌아 갑 니 다.
locale 은 특정한 매개 변수 로 국가 마다 다 를 수 있 습 니 다.그 목적 은 C 의 세계 적 인 통용 성 을 강화 하고 상세 하 게 기술 하지 않 는 것 입 니 다.
17 장 전형 적 인 추상 적 인 데이터 유형 과 18 장 이 실 행 될 때 환경 에 대해 전 자 는 이미 비교적 익숙 하 다.후 자 는 어 셈 블 리 와 밀접 하 게 결합 되 어 대충 훑 어 보 았 을 뿐 이 책 은 다 본 셈 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.