[리눅스] "리눅스 C가 정지 학습 프로그램"[C 언어] 촬영 Part.1 얻기

이 프로그램의 기본 개념

  • 그리고 프로그래밍 언어
    • C 언어 - (컴파일러) - 어셈블리 언어 - (어셈블러) - 기계 언어 (오브젝트 코드 / 실행 코드)
    • 휴대용 / 플랫폼 독립적 인 :이 컴퓨터 플랫폼의 조합 또는 운영 시스템 아키텍처, 또는 둘 모두를 의미합니다. 다른 플랫폼은 다른 명령어 세트를, 명령 형식으로 다른 인식 시스템
    • 프로그램 중 일부 컴퓨터 어셈블러 또는 기계의 지시에 직접 쓰기는 다양한 종류의 컴퓨터에서 실행이 자신의 컴퓨터 기계 명령어로 C 프로그램을 컴파일 할 수 있습니다 C 컴파일러를 가지고 컴퓨터에서만 사용할 수 있습니다
    • 컴파일 / 해석 언어 : 생성 오브젝트 코드없이 해석 언어, 통역, 라인별로 라인으로 실행, 번역
  • 자연 언어와 형식 언어
    • 자연 언어는 중국어, 영어, 프랑스어로, 인간의 언어를 사용하는 언어이다
    • 같은 수학 기호, 분자식, 프로그래밍 언어로 간주 특정 애플리케이션 디자인 언어에 대한 공식 언어
    • 엄격한 형식 언어 구문 (구문) 규칙이 있습니다
    • 구성되어 문법 기호 (토큰) 및 구조 (구조)에 대한 규칙이 있습니다
    • 기호 : 미리 정의 된 연산자 문자의 어휘 규칙 (어휘) 규칙입니다
    • 구조 : 일반 구조 문법 심볼 배치 (문법) 규칙
    • 구문 분석 (구문 분석) : 문장 구조 분석 프로세스
    • 자연 언어와 형식 언어의 차이
      • 모호함 (모호성) : 명확하고 모호하지 않은, 각 문에 대한 설계 요구 사항의 공식 언어는 상관없이 상황의 명확한 의미를 가지고
      • 중복 (중복) : 자연 언어 중복의 도입을 명확하게하기 위해, 중복 약간의 공식 언어
    • 일관성 문자 적 ​​의미 : 언어의 형태로, (유) 은유의 전체 자연 언어 문자 그대로 진정한 의미는
    • (컴퓨터 프로그램 포함) 연구 교재 형식 언어
      • 소형의 언어가 아닌 자연 언어의 형태, 독서 시간을 보내고
      • 구조는 매우 중요 위에서 아래로 읽거나 왼쪽에서 오른쪽으로, 그러나 뇌에서 해결해야한다, 토큰, 분류 체계를 식별하지 않는있다
      • 예컨대 철자 오류와 같은 오류 심볼 세세한,
  • 디버깅
    • 버그 분류
      • 구문 오류 컴파일 실패 오류가 컴파일 시간
      • 런타임 오류 : 컴파일러를 확인하지,하지만 충돌로 프로그램을 일으키는 오류 (두 개념의 차이에주의가 컴파일 타임 및 런타임) 런타임
      • 논리적 오류와 의미 오류 : 컴파일 및 매우 원활하게 실행하지만, 예상 결과를 달성하지 않았다
    • 프로그래밍 조언
      • 프로그래밍 = 디버그 : 디버깅 프로그램이 서서히 원하는 결과를 얻을 때까지
      • 항상 제대로 실행하는 소규모 프로그램에서 시작, 모든 작은 단계가 디버깅을 즉시 변경하기

상수, 변수 및 표현식

  • 정의, 할당, 초기화
    • 정의 : 메모리 공간을 할당하고 int와 시간으로, 이름을 지정;
    • 할당 : 메모리 공간에 저장된 값, 예로서 시간 = 11;
    • 초기화 : INT 시간으로 정의 + 할당 = 11;
  • 초기화는 특별한 변수 정의 문이 아니라 과제입니다
  • 등호 왼쪽으로 변수 이름 첨가 할당을 나타내고, 상기 이외의 경우는 취출하는 값, 여분을 나타낸다
  • 오퍼레이터 식 (식) (오퍼레이터) 및 오퍼랜드 (피연산자) 복합물
  • 할당 문의 표현이다
  • 운영자는 기본 우선 순위 계산이 필요 괄호에 의해 바람직하지 않은으로 우선 순위 (우선 순위)를 가지고 (괄호)
  • C 언어 규정의 결과는 오퍼레이터 등호 좌측의 값이 부여된다 같음
  • 상수 연산자 함께 발현을 형성하는 변수에 할당 될 수 있고, 변수 일 수있다
  • 단일 상수 또는 변수 조성물의 간단한 표현식
  • 상관 식은 식 첨가 될 수 값을 갖고 제 표현 구문을 구성

간단한 기능

  • 죄의 작용 (기능)이 죄 (PI / 2) PI / 2 파라미터 (인자)이고, 함수 호출 (함수 호출) 인
  • 함수 호출 죄 (PI / 2) 함수 호출 연산자 () 및 두 개의 오퍼랜드 식의 함수 값의 리턴 값으로 표현 (반환 값)
  • C 언어의 함수 부작용의 개념에 그것과 수학적 함수 간의 기본적인 차이 (부작용)을 가질 수있다
  • 식 A = B, 반환 값은 변경된 값, 부작용의 값이
  • 많은 시간이 우리가 printf와 ()와 같은 측면 기능의 효과보다는 반환 값에 대해 우려하고, 반환 값은 문자 수 실제로 오히려 인쇄보다 인쇄입니다
  • 부작용 완전히 반환 값을 무효로 정의 할 수있는 기능 이용
  • 기능 프로토 타입 (원형) : 함수 이름 및 매개 변수 유형 + + 반환 형식의 수
  • 사용 후 첫 번째 문을 함수
  • 틀린 표현 상기 컬럼은 동일한 변수의 종류가 아닌 이러한 공극 print_time 함수로서 파라미터의 정의 (INT시, 분) {}와 변수를 정의 할 때
  • 매개 변수 (파라미터)는 함수에 정의 된 변수들에 대응하는 전송 파라미터의 방법에 함수 호출이 초기화에 대응하는 매개 변수와 인수 (인수)의 값에 의해 정의되며
  • 기능 인터페이스가 일관성이 있어야한다는 전제를 사용하여, 인터페이스 (인터페이스), 호출 기능이 인터페이스를 사용하는 것입니다 제공
  • 함수 매개 변수 전달은 대신에 전역 변수를 사용할 수 없습니다
  • 글로벌 변수는 단지 일정한 식으로 초기화 될 수 있으며, 로컬 변수는 식의 어떤 형태로 초기화 될 수있다
  • 컴파일 할 때 C 언어는 컴파일 된 오브젝트 코드에 저장된 글로벌 변수의 초기 값을 소정의, 이러한 명령문 PI 이중 PI 초기화 전역 변수로 밖으로 산출 할 수 = 3.14 + 0.0016]이다 법적 더블 PI = ACOS ( -1.0)는 정당한 아니다
  • 글로벌 변수는 초기화시에 정의되어 있지 않은 경우, 초기 값은 0 (또는 "\ 0"나 "0.0"등)
  • 지역 변수가 정의에 초기화되지 않은 불확실성의 초기 값은, 먼저 사용하기 전에 로컬 변수를 지정해야합니다
  • 저장 공간의 지역 변수는 각 함수 호출, 해제 함수가 반환을 할당

지점 문

  • 지역 변수 저장 공간은 각 항목 문 블록에 할당, 문장 블록 출구에 출시
  • 함수 본문에 진술 가변 파라미터의 함수로 다음 단계의 함수로서 패키지의 성명
  • 또 항상 가장 가까운 한 경우의 톱 페어
  • 글로벌 변수와 유사 일정한 표현을해야합니다의 경우 뒤에, 당신은 컴파일시에 값을 계산해야

심층 기능의 이해

  • 등가의 함수 반환 값을 정의 및 기능의 종류는 동일한 임시 변수 값을 반환하고, 반환 식을 초기화 후자를 사용
  • 반환 값은 좌변하지, 당신은 그것에 할당 할 수 없습니다
  • return 문으로 함수를 작성할 때, 확인하는주의가 죽은 코드라고 어떤 조건에 도달 할 수없는 코드에서 모든 코드 경로 (코드 경로)
  • 증분 개발 (증분) : 가능한 재사용으로 (재사용) 코드를 피하기가 중복 코드를 작성하기 전에 작성. 패키지는 재사용하는 것입니다

고리

  • 재귀 사이클의 두 방법의 차이 : 재귀 순환 관계에 의해 (예를 들면! N = N * (N-1)) 식 루프가 확장 (예를 들어, N = N * (N-1) * (N-2! ) ... (3) * 2 * 1). 확장 수식을 쉽게 이해할 수 있지만 수식이 너무 복잡 할 때, 더욱 직관적 인 재귀를 확장 할 수 없습니다
  • 재귀이 과정에서 할당 많은 변수를 해제하지만 모든 변수 만 초기화시에 할당되어, 거기에 어떤 변수 변화의 값은 발생하지이며,주기는 자신의 목표를 달성하기 위해 여러 가지 변수를 지정하여 반복
  • 재귀 함수라는 프로그램 아이디어 (기능 프로그래밍), 아이디어는 필수 프로그래밍 사이클 (명령형 프로그래밍)라고
  • 재귀 설명 (선언)을 무엇을 수행하는 방법을 단계별로 (명령형)를 특정주기 단계를 설명
  • 함수 프로그래밍 "기능은"수학 함수의 개념과 유사없는 부작용이다, 이러한 스레드 안전 코드에 미치는 영향 등의 문제가 발생할 수 있습니다 변화의 변수 번호 명령형 방법, 그것은 "일관성"방법에 있어야합니다 여러 과제
  • 할 / 문은 잠시 문 다음에 세미콜론을 추가하면서
  • ++ I : 패스 변수, 리턴 값 (파라미터 +1) 부작용 : i 변수의 값 +1
  • I ++ : 패스 변수, 리턴 값 (파라미터) 부작용 : i 변수의 값 +1
  • 고토 : 무조건 점프, 레이블로 점프는 같은 기능에있을 수 있지만, 다른 기능으로 이동할 수 없습니다
  • 단지 오차 함수의 끝을 처리하는 기능에 대한 고토 문이 어디 오류 조건이 즉시 끝으로 점프 할 수가 있었다, 함수가 반환 치료 후

구조

  • 데이터 추상화 : A는 변경두면 "추출 공통 인자"와 유사하게, AB + 교류 = A (b + c), 두 가지 인자는 인자를 변경할 수있는 한, 수정해야
  • 이러한 시스템의 조합은 시스템의 복잡성과 추상을 제어 할 수 있는지 그래서 만 일정 수준으로 제한 변경 복잡 할 수 있으며, 전체 시스템에 영향을주지 않습니다
  • 컴퓨터 과학의 모든 문제는 간접 (추상화)의 또 다른 수준에 의해 해결 될 수있다 - 버틀러 램슨
  • 추상 계층 구조의 저장 포맷 및 상부 complex_struct 복잡한 연산 기능을 도시 이격 된 복수의 저장하여
  • 열거 타입 : 구조는 다음과 같은 입력의 종류를 수신 가능 ENUM coordinate_type {RECTANGULAR, POLAR} 구조체 complex_struct {ENUM coordinate_type t, 이중 A, B]}, 데이터 타입 식별자와 같은 직교 및 극을 정의하여 좌표 데이터는 구조체 complex_struct에 적용 할 수있다

배열

  • 배열 (배열)은 복잡한 데이터 입력 요소 (요소) 조성물의 동일한 유형의 일련
  • 이용 배열 첨자 범위 배열의 길이를 초과 할 수없고, C 컴파일러 배열 범위의 오류를 검사하지 않기
  • 다른 구조의 배열은 : 상기 어레이가 아닌 파라미터 나 리턴 값의 함수로서, 서로에게 할당 될 수 없다
  • 배열 이름 r- 수치를 사용하는 경우, 자동으로 어레이의 첫 번째 요소를 가리키는 포인터로 변환 할
  • 임의의 숫자가 실제로 의사 난수 (의사 랜덤)이다 얻기 위해 C 표준 라이브러리를 사용하지만, 외모 매우 무작위, 그 결과는 각 실행에 대해 동일
  • () 시간 (NULL) 씨 등 다른 방법의 확정 번호를 한 다음부터 srand,이 기준에 의사 난수를 생성 (초 단위 1970년 1월 1일 0시 0분 0초 현재 시간 드라마)
  • 의사 난수, 헤더 파일 인 stdlib.h 생성 랜드 ()를 사용하여 반환 값이 0과 RAND_MAX 사이의 정수이며, RAND_MAX는 헤더 파일에 정의 된 상수는, 당신이 특정 범위 내에서 사용 가능한 임의의 프로세스 %의 수를 정의하려면, INT X = 랜드 (10 %) (0 ~ 9의 난수)
  • (추상적 마찬가지로 큰 로컬 변경 확산 범위를 회피하기 위해) (하드 코딩), 하드 코딩 피할 전처리 단계 프로세스를 정의

  • 문자열 배열의 요소로 볼 수있는 것은 문자이며, 문자의 끝에 "\ 0"문자열의 끝을 나타냅니다. 문자열 읽기 전용, 수정할 수 없습니다입니다
  • 사용에 대한 권리 값을 수행, 자동으로 첫 번째 요소에 대한 포인터를 가리키는로 변환
  • 초기화 문자열이 배열 길이를 지정하고있다하자 때 컴파일러는 자동으로 계산
  • 데이터 기반 프로그래밍 (데이터 기반 프로그래밍) : 가장 중요한 것은 프로그래밍하는 것은 긴 올바른 데이터 구조가 선택되어 같은 정보, 제어 프로세스와 여전히 다음 알고리즘을 구성 할 올바른 데이터 구조를 선택하는 것입니다, 코드를 이해하고 자연을 유지하기 위해 쉽게

코딩 스타일

  • 코드는 포스터에 쓰기뿐만 아니라 방법을 수행하는 기계를 사용하여 주로
  • 리눅스 커널 CodingStyle
    • 문 블록을 들여 쓰기하여 계층 구조를 반영 (탭)
    • / 만약 다른 반면, 다른 블록 대신 별도의 행의 공백으로 구분하여 키워드를 작성해야 문 문,}와 {문 블록을 취할 수에 대한
    • 별도의 줄에 정의 된 기능}과 {
    • 스위치와 경우에 문장 블록, 기본 정렬 쓰기
    • 단락 사이에 빈 라인으로 각각의 논리적 코드는 이격
    • 패킷은, 관계에있어서, 상기 함수는 빈 라인으로 구분
  • 주의
    • 소스 파일 참고의 전체 상단 : 파일 이름, 저자, 버전 기록
    • 주 기능 : 기능 기능, 매개 변수, 반환 값, 오류 코드
    • 문 참고 : 명령문의 측면에 작성
    • 코드 짧은주의 사항 : 올바른 코드와 쓰기, 그리고 코드는 적어도 소스 파일의 모든 바람직하게는 수직으로 바로 주석을 정렬 공백으로 구분
    • 내 코드가 아니라 그것을 수행하는 방법보다, 할 수있는 수 만 보여 적게는 기능 설명 (한 코드가 알 수있는 바와 같이, 수행하는 방법에 그렇지 않으면 코드의 가독성이 좋지 분명하다)
    • 복잡한 구조, 매크로 정의와 변수 정의는 코멘트에 필요
  • 변수
    • 선명도, 우리는 단어와 약어를 이해하기 모두 쉽게 완료 할 수 있습니다
    • 변수는 모두 소문자를 사용하여 기능 유형은 밑줄 대문자 모든 상수 (매크로와 열거)를 강조
    • 주의 헝가리어 표기법하지 병음
  • 기능
    • 함수에 하나의 일을 할
    • 더 이상 네 이상의 층의 내부 기능 들여 쓰기 수준
    • 너무 오래 함수를 작성하지 마십시오
    • 실행 기능이 작업을 수행하는 것입니다, 함수 이름은 일반적으로 동사를 포함해야
    • 너무 많은 지역 변수
  • 들여 쓰기 도구 : 코드는 특정 스타일로 포맷 할 수 있습니다

GDB

  • 단계 시운전 : 현상의 분석 - 새로운 현상 테스트 가설을 생성> -> 잘못된 이유를 가정
  • 단일 단계 실행 및 추적 함수 호출
  • 중단 점 (브레이크 포인트)
  • 관측 지점 (와치 포인트) : 저장 장치가 모른다는 변경 될 수 있습니다
  • 세그먼트 오류 : 함수, 그것은 오류가 발생하는 즉시 세그먼트 오류 세그먼트를 생성 할 수 없습니다 경우 액세스 위반이 발생하면 함수가 반환

정렬 및 찾기

  • 결정 정확성 루프 루프 불변 방법
    • 제 판정 조건을 수행하는 루프 전에 사실
    • 는 "N-1 상태를 결정하는 첫 번째 사이클이 참 후,"전제가 설립, 당신이 증명할 수는 N주기는 최초의 판단 조건은 진정한 남아 이후 있다는 경우
    • 결국 조건을 결정하는주기는 사실, 다음 알고리즘이 제대로입니다

스택과 큐

  • 데이터 저장, 접근 방법은, 우리는이 알고리즘을 지원하기 위해 적절한 알고리즘 설계 데이터 구조를 설계해야하는 동시에, 알고리즘이 이용 될 수 있는지의 문제를 해결하는 문제가 결정
  • 스택 - LIFO - 깊이 우선 탐색 (DFS) - 역 추적 (뒤로를)
  • 큐 - 선입 선출 (FIFO) - 폭 우선 탐색 (BFS)

 

참고

http://docs.linuxtone.org/ebooks/C&CPP/c/

추천

출처www.cnblogs.com/cxc1357/p/12356222.html