CONST 정적 통근자를 정의

CONST

  1. 그는 변수가 변경되는 것을 방지하고 싶었 기 때문에 const를 수단은 "읽기 전용"당신은 CONST 키워드를 사용할 수 있습니다

  2. 단지 오른쪽 수정하는 데 CONST 변수 (기본 데이터 변수 (P)를, 포인터 변수 * P)

밝히다

#DEFINE 지시문은 세 가지 용도로 사용 :

  1. 제 식별자 #DEFINE XXX 모양 전체 프로그램 식별자 유효 범위는 종종의 #if와 함께 사용 정의

  2. 이전에 컴파일 될 수없는 CONST 정수 데이터 유형 및 데이터는 매크로 상수 타입 : 제 상수 때문에 최대,이 경우 (상수를 정의 CONST 100 개 대표 100 #DEFINE 최대로 정의된다. 후자 만 문자 교환, 보안 검사없이 형식 및 문자 교체 예기치 않은 에러를 발생할 수 있지만), 보안 검사를 입력

  3. 세번째는 #DEFINE의 get_max (a, b)로서 "기능"의 정의, ((a)> (b)? (A) :( B) 나중에 get_max 사용) (X, Y) (X)와이 Y 얻을 수있다 더 큰 숫자 (예 : get_max의 (a ++, b)에 ++ 얼마나 많은 시간이 될 것입니다 때와 같이이 방법의 몇 가지 단점이있다이 (가)의 크기와 b의 실행에 따라 달라집니다!이 방법 대신 속도 나 사용 인라인 기능을 높이기 위해 제안 이러한 단점이 있지만, a와 b는 다양한 데이터 유형이 될 수 있기 때문에이 방법은 실제로 매우 유연 않는다.).

CONST 상수 매크로 정의의 차이를 규정

1. 다른 컴파일러 처리

  • 매크로는 전처리 단계에서 확장됩니다 정의합니다
  • CONST 상수 동작 위상을 사용하여 컴파일

2. 다른 보안 검사

  • 매크로가 아닌 모든 종류의 검사를하지 않는 유형을 정의, 단지 시작
  • CONST 상수는 특정 유형이 컴파일 타임에 유형 검사를 수행

다른 방법 3. 저장

  • 메모리를 할당하지 않고, 단지 얼마나 많은 시간이 시작했다 얼마나 많은 장소, 시작 매크로를 정의
  • 메모리 할당 CONST 상수 (힙 스택 일 수있다)

4. 메모리 공간 할당

  • CONST 공간을 절약하고 불필요한 메모리 할당을 피할 수 있습니다

    상수 매크로 #DEFINE의 PI 3.14159 //
    const를 doulbe 파이 = 3.14159을하며 ROM에 //없는 경우 파이는 ......
    더블 파이 = I, 파이가 //이 경우 메모리를 할당은 더 이상 할당되지 않습니다!
    I는 PI를 두배 = // 컴파일 매크로 여분 메모리 할당
    이중 J = 파이 //없이 메모리 할당
    이중 J = PI를 // 매크로 교체 후, 다시 메모리를 할당!
    도면의 조립 지점에서 정의 CONST 상수는 상기와 같이 (상수의 CONST이 실행되고있는 프로그램의 하나 개의 사본을 정의하므로, 소정 #DEFINE 즉각적인으로없고, 단지 대응하는 메모리 주소를 제공한다 읽기 전용 전역 변수, 정적 영역)이 존재하고, 상수의 수는 메모리 #DEFINE 복사본을 정의.

의 효율성을 개선 (5)

  • 컴파일러는 일반적 CONST 일반 분포 상수가 존재하지 않는 많은 열  고정 통근 정의 CONST 저장 공간을하지만, 이들은 편집, 저장 동안 그것을 일정하게 기호 테이블에 저장되고 어떤 메모리는 읽기 동작하지 같은 것이 해당 효율이 매우 높다

6. 매크로 여분 여분 만 아니라 계산, 식 해결하지

  • 에이서는 런타임 메모리를 할당하지 않고, 미리 컴파일 시간을 대체

7. 요약

  1. 매크로 : 단지 어떤 종류의 검사없이, 컴파일러는 전처리에서 같은 문자열을 최적화 할 수있다, 또는 어떤 유형을 텍스트 없습니다. 만 .rodata 세그먼트를 유지합니다. 같은 접미사 문자열도 최적화 할 수있다하더라도, 당신은 GCC 컴파일러 테스트 "안녕하세요 세계"와 "세계"두 개의 문자열, 상점 하나 개의 전선을 사용할 수 있습니다. 촬영시 바로 앞쪽과 중간 주소를 제공하는 것이 플라스틱 인 경우, 복수의 사본 플로트하지만 명령에 기록이 수있을 것이다. 그것의 단지 조각을 차지, 매크로와 바이너리 파일의 큰 숫자는 더 큰 이어질 것

  2. 변수 : 공유 메모리 공간은 프로젝트가 N에 사용하는 경우에도, N은 컴파일시 타입 검사를 수행하도록 변경 될 수있는 메모리 공간의 블록을 할당 할 것이다

  3. 상수 : N, N 블록이 메모리 공간이 할당되지 않은 프로젝트에서 사용하는 경우에도 공유 메모리 공간은 컴파일시 타입 검사를 수행하는, 상기 위치 설정 CONST 변형에 따라 변형 될 수있는 것

  4. 상수로 선언해야 static상수가 아닌 #define명시 적으로 매크로로 사용하지 않는이야.

공전

  1. 지역 변수를 수정 : 지역 변수의 수명을 연장하기 위해, 프로그램은 파괴를 종료합니다, 지역 변수는 한 번만 메모리 초기화를 생성합니다

  2. 전역 변수를 수정,이 파일을 액세스 할 수있는 전역 변수의 범위를 수정, 그것은 전역 변수의 정의를 피하기 중복에, 수명주기를 변경하지 않습니다

  3. 모듈의 정적 글로벌 변수 함수에 의해 모듈 내에서 액세스 될 수 있지만, 다른 기능 모듈의 외부 액세스 할 수없는

  4. 모듈 내의 스태틱 기능 만 모듈 내의 다른 기능에 의해 호출 될 수 있고,이 기능의 사용을 선언 된 모듈 내에 한정

  5. 클래스의 정적 멤버 변수는 하나의 복사본 만의 클래스의 클래스 소유의 모든 개체에 속하는

  6. 클래스의 정적 멤버 함수가 소유 한 클래스에 속하는,이 기능은 클래스에만 액세스 할 수있는 정적 멤버 변수를이 포인터를받지 않습니다

외부

  1. 효과 : 전용 변수를 정의하기 위해 사용될 수 없다 (고정 전역 변수를 포함) 전역 변수의 값을 얻기 위해 사용

  2. 작동 원리 : 현재 파일에서 첫 번째보기는 전역 변수가 없습니다, 우리는 다른 파일을 찾으려면 찾을 수 없습니다.

공동 사용

  1. 정적 및 CONST 기능 : 읽기 전용 정적 변수 선언,
    사용 시나리오의 개발 : 문자열 상수가 종종 문서에 사용되는, 당신은 정적 및 const를 조합하여 사용할 수 있습니다

  2. 개발 사용 시나리오 : 그 통근 CONST 및 조합을 사용하여 자주 여러 파일에 사용 된 동일한 문자열 상수.
    그리고 const 정적의 조합 : 각 파일에 정적 전역 변수를 정의 할 필요가있다.
    통근 및 CONST 조합 : 단지 전역 변수, 여러 파일 공유를 정의해야합니다.

추천

출처www.cnblogs.com/lijianming180/p/12326841.html