이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 54.4. 기타 코딩 토토 캔버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

52.4. 기타 코딩 토토 베이

52.4.1. C 표준

코드에서postgresqlC89 표준에서 사용 가능한 언어 기능에만 의존해야합니다. 이는 적어도 몇 개의 플랫폼 의존성 조각을 제외하고는 준수 된 C89 컴파일러가 Postgr을 컴파일 할 수 있어야한다는 것을 의미합니다. 폴백이 제공되는 경우 C 표준 또는 컴파일러 특정 기능의 나중에 개정 된 기능을 사용할 수 있습니다.

예를 들어정적 인라인and_static_assert ()는 현재 C 표준의 새로운 개정에서 나오더라도 현재 사용됩니다. 사용할 수없는 경우 각각 인라인없이 기능을 정의하고 동일한 점검을 수행하는 C89 호환 교체를 사용하지만 다소 비밀스러운 메시지를 방출합니다..

52.4.2. 기능과 유사한 매크로 및 인라인 토토 베이

둘 다, 인수가있는 매크로 및정적 인라인함수는 사용될 수 있습니다. 후자는 매크로로 작성 될 때 다중 평가 위험이있는 경우, 예를 들어와 같이 선호됩니다.

#define max (x, y) ((x) (y)? (x) : (y))

또는 매크로가 매우 길어질 때. 다른 경우에는 매크로를 사용하거나 최소한 더 쉽습니다. 예를 들어 다양한 유형의 표현을 매크로로 전달해야하기 때문입니다.

인라인 함수의 정의가 백엔드의 일부로 만 사용할 수있는 기호 (즉, 변수, 함수)를 참조하는 경우 프론트 엔드 코드에서 포함시 함수가 표시되지 않을 수 있습니다..

#ifndef 프론트 엔드
정적 인라인 memoryContext
MemoryContexTswitchto (MemoryContext Context)

    MemoryContext Old = currentMemoryContext;

    currentMemoryContext = 컨텍스트;
    옛날 복귀;

이 예에서currentMemoryContext10334_10428#ifndef frontend. 이 토토 베이은 일부 컴파일러가 함수가 사용되지 않더라도 인라인 함수에 포함 된 기호에 대한 참조를 방출하기 때문에 존재합니다.

52.4.3. 신호 처리기 작성

신호 핸들러 안에서 실행하기에 적합하려면 매우 신중하게 작성해야합니다. 근본적인 문제는 차단되지 않으면 신호 처리기가 언제든지 코드를 방해 할 수 있다는 것입니다. 신호 핸들러 내부의 코드가 혼돈 외부의 코드와 동일한 상태를 사용하는 경우. 예를 들어, 신호 핸들러가 인터럽트 코드에 이미 보유 된 잠금 장치를 얻으려고하는 경우 어떻게되는지 고려하십시오.

신호 핸들러의 특수 배열 코드 제외 코드는 Async-Signal Safe 토토 베이 (POSIX에 정의 된대로) 및 유형의 액세스 변수 만 호출 할 수 있습니다휘발성 sig_atomic_t. 의 몇 가지 기능Postgres또한 신호로 간주됩니다.setLatch ().

대부분의 경우 신호 핸들러는 신호가 도착했다는 점에 주목하고 래치를 사용하여 핸들러 외부에서 실행되는 웨이크 업 코드를 주목해야합니다. 그러한 핸들러의 예는 다음과 같습니다.

정적 무효
handle_sighup (Signal_args)

    int save_errno = errno;

    got_sighup = true;
    setlatch (mylatch);

    errno = save_errno;

errno이 저장 및 복원되었습니다setLatch ()변경할 수 있습니다. 그것이 완료되지 않은 경우 현재 검사중인 방해 된 코드errno잘못된 값을 볼 수 있습니다.