C에서 문자열 상수를 어떻게 선언합니까?
C에서 숫자 상수를 enum
s 대신 s 로 선언하는 것이 관용적이거나 적어도 좋은 스타일이라는 것을 알고 #define
있습니다.
/* bad style */
#define MAXLINE 1024
/* good/better style */
enum {
MAX_LINE = 1024
};
문자열 상수의 정의에 대한 동등한 규칙이 있습니까?
/* is this good style? */
#define HELLO "Hello World"
/* or is this better? */
const char *HELLO2 = "Howdy";
당신은 무엇을 선호합니까? 가능하다면 두 방법의 몇 가지 단점을 보여주십시오.
로마로가는 길이 (적어도) 하나 더 있습니다.
static const char HELLO3[] = "Howdy";
( static
— 선택 사항 — 다른 파일과 충돌하지 않도록합니다). 나는 const char*
이것을 사용할 수 있기 때문에 이것을 선호 sizeof(HELLO3)
하고 따라서 컴파일 타임에 할 수있는 것을 런타임까지 연기 할 필요가 없습니다.
정의는 컴파일 시간 연결의 장점이 있지만 (생각 HELLO ", World!"
) 할 수 sizeof(HELLO)
있습니다.
그러나 그런 다음 const char*
여러 파일에서 선호 하고 사용할 수도 있으므로 메모리를 절약 할 수 있습니다.
요컨대-상황에 따라 다릅니다.
문자열 상수를 정의 할 때 (매우 사소하지만) 장점 중 하나는 연결할 수 있다는 것입니다.
#define HELLO "hello" #define WORLD "세계" puts (HELLO WORLD);
이것이 실제로 이점인지는 확실하지 않지만 const char *와 함께 사용할 수없는 기술입니다.
질문과 같은 "const string"을 원하면 질문에 언급 한 버전을 사용합니다.
/* first version */
const char *HELLO2 = "Howdy";
특히 다음을 피할 것입니다.
/* second version */
const char HELLO2[] = "Howdy";
이유 : 두 번째 버전의 문제는 컴파일러가 전체 문자열 "Howdy"의 복사본을 만들고 그 문자열을 수정할 수 있다는 것입니다 (정말 const가 아님).
반면에 첫 번째 버전은 const 포인터 HELLO2가 액세스 할 수있는 const 문자열이며, 누구도 수정할 수있는 방법이 없습니다.
#define 메서드의 가장 큰 단점은 문자열이 사용될 때마다 복제되므로 실행 파일에 많은 복사본이 생겨서 더 커질 수 있다는 것입니다.
참고 URL : https://stackoverflow.com/questions/1431576/how-do-you-declare-string-constants-in-c
'IT TIP' 카테고리의 다른 글
사용자 지정 Maven 2 속성에 대한 기본값 설정 (0) | 2020.12.03 |
---|---|
ArrayList를 새 크기로 축소 (0) | 2020.12.03 |
일부 Python 코드의 형식을 올바르게 지정하려면 어떻게해야합니까? (0) | 2020.12.03 |
UITextField가 첫 번째 응답자가 될 때 UIScrollView 스크롤 비활성화 (0) | 2020.12.03 |
Android : 프로그래밍 방식으로 선택기 (StateListDrawable)를 업데이트하는 방법 (0) | 2020.12.03 |