기술나눔

"C 언어" 전처리

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. 사전 정의된 기호

C 언어는 전처리 중에 직접 사용하고 처리할 수 있는 사전 정의된 기호를 설정합니다.

__FILE__//进行编译的源文件
__LINE__//文件当前的行号
__DATE__//文件被编译的日期
__TIME__//文件被编译的时间
__STDC__//如果编译器遵循ANSI C,其值为1,否则未定义
  • 1
  • 2
  • 3
  • 4
  • 5

시험 결과:
여기에 이미지 설명을 삽입하세요.

2. #define은 상수를 정의합니다.

#define은 상수를 정의할 때 정의를 작성하는 데 사용됩니다.

#define MAX 100
  • 1

다음 코드에 나타날 때 MAX를 100으로 직접 바꾸는 것이 논리적 규칙입니다. 이 작업 단계는 일반적으로 #define을 사용하여 상수를 정의할 때 이름을 대문자로 작성합니다.

사용되는 장면:
여기에 이미지 설명을 삽입하세요.

3. #define은 매크로를 정의합니다

#define은 함수와 동일한 방식으로 매크로를 정의하는 데 사용되지만 논리는 대체입니다. 대체할 때 예기치 않은 결과가 발생할 수 있는 연산자 우선 순위 문제를 방지하기 위해 변수를 괄호로 묶어야 합니다.
사용하는 방법:

#define MAX(x,y) ((x) > (y) ? (x) : (y))
  • 1

이는 두 숫자 중 직접적으로 더 큰 값을 판단하기 위해 작성된 매크로입니다. 매크로 이름 뒤의 괄호는 매크로에 가까워야 합니다.

사용 사례:
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

위의 두 가지 경우를 통해 매크로는 매개변수를 전달할 때 유형을 제한하지 않는다는 것을 알 수 있습니다. 함수를 전달하면 함수의 반환 유형이 고정되어 매크로가 더 빠르게 실행됩니다.

4. 매크로 업데이트 기능 비교

매크로의 장점:

  • 1. 적은 양의 코드로 계산을 완료할 때 매크로의 작업 시간은 함수의 작업 시간보다 짧습니다.
  • 2. 더 중요한 것은 함수의 매개변수가 특정 유형으로 선언되어야 한다는 것입니다. 매크로는 >를 사용하여 비교할 수 있는 다양한 유형에 적용할 수 있습니다. 매크로 유형은 관련이 없습니다.

매크로의 단점:

    1. 매크로가 사용될 때마다 매크로 정의 코드의 복사본이 프로그램에 삽입됩니다. 매크로가 상대적으로 짧지 않으면 프로그램 길이가 크게 늘어날 수 있습니다.
    1. 매크로는 디버깅할 수 없습니다.
    1. 매크로는 유형 독립적이므로 충분히 엄격하지 않습니다.
    1. 매크로는 연산자 우선순위 문제를 발생시켜 프로그램에 오류가 발생하기 쉽습니다.

매크로 및 기능 비교표:

속성#define 정의된 매크로기능
코드 길이 매크로는 사용될 때마다 프로그램에 삽입됩니다.매우 작은 매크로를 제외하면 프로그램 길이가 크게 늘어납니다.함수 코드는 사용될 때마다 한 곳에서만 나타나며, 그 곳의 동일한 코드가 호출됩니다.
실행 속도더 빠르게함수 호출 및 반환에 추가 오버헤드가 발생하므로 속도가 느려집니다.
연산자 우선순위매크로 매개변수는 주변의 모든 표현식의 맥락에서 평가됩니다. 괄호가 포함되지 않으면 인접 연산자의 우선순위가 예측할 수 없는 결과를 초래할 수 있으므로 더 많은 괄호를 사용하여 매크로를 작성하는 것이 좋습니다. 함수 매개변수는 함수가 호출될 때만 평가되어 함수에 전달됩니다. 표현식은 예측 가능하게 평가됩니다.
부작용이 있는 매개변수매개변수는 매크로 본문 내의 여러 위치로 대체될 수 있으며, 매크로의 매개변수가 여러 번 평가되는 경우 부작용이 있는 매개변수 평가로 인해 예측할 수 없는 결과가 발생할 수 있습니다.함수 매개변수는 매개변수를 전달할 때만 평가되며 제어하기 쉽습니다.
매개변수 유형매크로의 매개변수는 유형과 관련이 없으며 매개변수에 대한 조작이 합법적인 한 모든 매개변수 유형에 사용될 수 있습니다.함수의 매개변수는 유형과 관련되어 있습니다. 서로 다른 경우에는 다른 기능이 필요하며 작업도 다릅니다.
디버그매크로는 디버깅이 불편합니다명령문별로 함수를 디버깅할 수 있습니다.
재귀매크로는 재귀적일 수 없습니다.매크로는 재귀적일 수 없습니다.

5. #과 ##

1. #연산자

#연산자는 매크로의 인수를 문자열 리터럴로 변환합니다. 매개변수가 있는 매크로의 대체 목록에만 나타날 수 있습니다.
# 연산자가 수행하는 작업은 "문자열화"로 이해될 수 있습니다.

사용 예:
여기에 이미지 설명을 삽입하세요.

2. ## 연산자

##은 양쪽의 기호를 하나의 기호로 결합할 수 있으므로 매크로 정의가 별도의 텍스트 세그먼트에서 식별자를 생성할 수 있습니다.마커용 접착제
이러한 연결은 유효한 식별자를 생성해야 합니다. 그렇지 않으면 결과가 정의되지 않습니다. 여기서 생각해 봅시다. 두 숫자 중 더 큰 값을 찾는 함수를 작성할 때, 서로 다른 데이터 유형에 대해 서로 다른 함수를 작성해야 합니다.

사용 예:
여기에 이미지 설명을 삽입하세요.