4.3.4. ARM 함수 한정자 배치

많은 ARM 키워드 확장자는 함수의 동작 또는 호출 시퀀스를 수정합니다. 예를 들어 __pure, __irq, __swi, __swi_indirect, __softfp__value_in_regs는 모두 이러한 방식으로 동작합니다.

이 함수 한정자는 모두 공통 구문을 가집니다. __pure와 같은 함수 한정자는 다음과 같은 위치에서 함수 선언을 정규화할 수 있습니다.

간단한 함수 선언의 경우 각 구문이 명확합니다. 그러나 반환 형식 또는 인수가 함수 포인터인 함수의 경우 접두사 구문이 부정확합니다. 예를 들어 다음 함수는 함수 포인터를 반환하지만 __pure가 함수 자체를 수정하는지 또는 반환된 포인터 형식을 수정하는지 여부는 명확하지 않습니다.

__pure int (*foo(int)) (int); /* declares 'foo' as a (pure?) function that
                                 returns a pointer to a (pure?) function.
                                 It is ambiguous which of the two function
                                 types is pure. */

사실 foo 선언 앞에 있는 단일 __pure 키워드는 foo 자체와 foo가 반환한 함수 포인터 유형을 둘 다 수정합니다.

반면에 인수 및 반환 유형이 함수 포인터인 함수를 선언할 때 접미사 구문을 사용하면 __pure가 인수, 반환 유형 또는 기본 함수 중 어디에 적용되는지 알 수 있습니다. 예를 들면 다음과 같습니다.

int (*foo1(int) __pure) (int);        /* foo1 is a pure function returning
                                         a pointer to a normal function */
int (*foo2(int)) (int) __pure;        /* foo2 is a function returning
                                         a pointer to a pure function
int (*foo3(int) __pure) (int) __pure; /* foo3 is a pure function returning
                                         a pointer to a pure function */

이 예제에서는 다음 사항이 적용됩니다.

접미사 구문은 접두사 구문보다 더 정확하기 때문에 ARM 함수 한정자로 함수를 한정할 때 가능한 한 접미사 구문을 활용하는 것이 좋습니다.

Copyright © 2002-2007 ARM Limited. All rights reserved.ARM DUI 0205HK
Non-Confidential