3.5.4. 상수 읽기/쓰기

외부 상수에 대한 링키지 지정은 상수가 동적으로 초기화되거나 가변 구성원을 포함할 수 있음을 나타냅니다.

Note

"C++:read/write" 링키지는 --apcs /rwpi로 컴파일한 코드에서만 사용해야 합니다. 이 옵션을 사용하여 기존 코드를 다시 컴파일할 경우 동적으로 초기화되거나 가변 구성원을 포함할 수 있는 외부 상수에 대해 링키지 지정을 변경해야 합니다.

--apcs /rwpi 옵션을 사용하여 C++를 컴파일하는 것은 ISO C++ 표준에서 벗어납니다. Example 3.1의 선언은 x가 읽기 전용 세그먼트에 있다고 가정합니다.

Example 3.1. 외부 액세스

extern const T x;
extern "C++" const T x;
extern "C" const T x;

x(사용자 정의 생성자 포함)의 동적 초기화는 상수에서 불가능하며 T는 가변 구성원을 포함할 수 없습니다. Example 3.2의 새 링키지 지정에서는 x가 상수를 사용하여 초기화되었더라도 읽기/쓰기 세그먼트에 있음을 선언합니다. x의 동적 초기화가 허용되며 T는 가변 구성원을 포함할 수 있습니다. x, yz 정의에 대한 링키지 지정은 다른 파일에서도 서로 동일해야 합니다.

Example 3.2. 링키지 지정

extern const int z;                   /* in read-only segment, cannot  */	
                                      /* be dynamically initialized    */	

extern "C++:read/write" const int y;  /* in read/write segment */	
                                      /* can be dynamically initialized */	
extern "C++:read/write"
{	
    const int i=5;                    /* placed in read-only segment, */	
                                      /* not extern because implicitly static */	
    extern const T x=6;               /* placed in read/write segment */	
    struct S
    {	
        static const T T x;           /* placed in read/write segment */	
    };	
}

상수 개체는 다른 링키지와 함께 다시 선언하지 마십시오. Example 3.3의 코드에 컴파일 오류가 발생합니다.

Example 3.3. 컴파일러 오류

extern "C++"  const T x;
extern "C++:read/write"  const T x; /* error */

Note

C에는 링키지 지정이 없으므로 C++에서 선언된 const 개체를 C의 extern "C++:read/write"로 사용할 수 없습니다.

추가 참고

Copyright © 2007 ARM Limited. All rights reserved.ARM DUI 0348AK
Non-Confidential