코드에서와이즈 토토C99 표준에서 사용 가능한 언어 기능에만 의존해야합니다. 즉, 적어도 몇 개의 플랫폼 의존적 조각을 제외하고는 C99 컴파일러가 Postgr을 컴파일 할 수 있어야합니다.
현재 C99 표준에 포함 된 몇 가지 기능은 현재 핵심에서 사용할 수 없습니다와이즈 토토코드. 여기에는 현재 가변 길이 배열, 혼합 선언 및 코드가 포함되어 있습니다.//
댓글, 보편적 인 캐릭터 이름. 휴대 성과 역사적 관행을 포함하는 이유.
폴백이 제공되는 경우 C 표준 또는 컴파일러 특정 기능의 이후 개정의 기능을 사용할 수 있습니다.
예 :_static_assert ()
and__builtin_constant_p
현재 C 표준 및 A의 새로운 개정에서 나온 경우에도 현재 사용되고 있습니다.GCC각각 확장. 사용할 수없는 경우 각각 동일한 검사를 수행하는 C99 호환 교체품을 사용하는 것으로 되돌아 가지만 다소 비밀 메시지를 방출하고 사용하지 않습니다__builtin_constant_p
.
인수가있는 매크로와정적 인라인
함수가 사용될 수 있습니다. 후자는 매크로로 작성 될 때 다중 평가 위험이있는 경우, 예를 들어와 같이 선호됩니다.
#define max (x, y) ((x) (y)? (x) : (y))
또는 매크로가 매우 길어질 때. 다른 경우에는 매크로를 사용하거나 최소한 더 쉽습니다. 예를 들어 다양한 유형의 표현을 매크로로 전달해야하기 때문입니다.
인라인 함수의 정의가 백엔드의 일부로 만 사용할 수있는 기호 (즉, 변수, 함수)를 참조하면 프론트 엔드 코드에 포함될 때 기능이 표시되지 않을 수 있습니다..
#ifndef 프론트 엔드 정적 인라인 memoryContext MemoryContexTswitchto (MemoryContext Context) MemoryContext Old = currentMemoryContext; currentMemoryContext = 컨텍스트; 옛날 복귀;
이 예에서currentMemoryContext
10789_10883#ifndef frontend
. 이 규칙은 일부 컴파일러가 함수가 사용되지 않더라도 인라인 함수에 포함 된 기호에 대한 참조를 방출하기 때문에 존재합니다.
신호 핸들러 코드 내부에서 실행하기에 적합하려면 매우 신중하게 작성해야합니다. 근본적인 문제는 차단되지 않으면 신호 처리기가 언제든지 코드를 방해 할 수 있다는 것입니다. 신호 핸들러 내부의 코드가 혼돈 외부의 코드와 동일한 상태를 사용하는 경우. 예를 들어, 신호 핸들러가 인터럽트 코드에 이미 보유 된 잠금 장치를 얻으려고하는 경우 어떻게되는지 고려하십시오.
신호 핸들러의 특수 배열 코드 제외 코드는 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
잘못된 값을 볼 수 있습니다.
명확성을 위해, 포인터가 간단한 변수 인 경우 뾰족한 기능을 호출 할 때 함수 포인터를 명시 적으로 피하는 것이 선호됩니다.
(*emit_log_hook) (edata);
(그래도emit_log_hook (edata)
작동). 기능 포인터가 구조의 일부인 경우, 추가 문장 부호는 예를 들어 다음과 같이 생략 할 수 있고 일반적으로 생략해야합니다.
paraminfo- paramfetch (paraminfo, paramid);
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면