C에서는 문자열 상수를 어떻게 선언합니까?
C에서 숫자 상수를 다음과 같이 선언하는 것이 꽤 관용적이거나 적어도 좋은 스타일이라는 것을 알고 있습니다.enum
대신 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 "world"
puts( HELLO WORLD );
그게 정말 좋은 점인지는 잘 모르겠지만, 그건 다른 사람들과 함께 사용할 수 없는 기술입니다.const char *
의
당신의 질문처럼 "계속 문자열"을 원하신다면, 저는 당신이 질문에서 말한 버전을 정말로 원합니다.
/* first version */
const char *HELLO2 = "Howdy";
특히, 나는 다음을 피하고 싶다.
/* second version */
const char HELLO2[] = "Howdy";
이유: 두 번째 버전의 문제는 컴파일러가 "Howdy" 문자열 전체를 복사하고 그 문자열은 수정할 수 있다는 것입니다(따라서 실제로는 변하지 않습니다).
한편, 첫 번째 버전은 포인터 HELLO2에서 액세스할 수 있는 const 문자열이므로 변경할 수 없습니다.
그것들은 몇 가지 차이점입니다.
#define HELLO "Hello World"
위의 문장은 프리프로세서와 함께 사용할 수 있으며 프리프로세서에서만 변경할 수 있습니다.
const char *HELLO2 = "Howdy";
위의 문장은 c코드로 변경할 수 있습니다.이제 아래 문장과 같이 각각의 문자를 변경할 수 없습니다.이는 일정하기 때문입니다.
HELLO2[0] = 'a'
단, 아래 문장과 같이 다른 문자열을 가리킬 수 있습니다.
HELLO2 = "HELLO WOLRD"
변수를 어떻게 바꾸느냐에 따라 달라집니다.프리프로세서 또는 C코드를 사용합니다.
#define 메서드의 주요 단점은 문자열이 사용될 때마다 중복되므로 실행 파일에 많은 복사본이 저장되므로 더 커질 수 있습니다.
언급URL : https://stackoverflow.com/questions/1431576/how-do-you-declare-string-constants-in-c
'programing' 카테고리의 다른 글
NuxtJ는 동적 웹 사이트에서 생성됩니까? (0) | 2022.08.11 |
---|---|
Vue.js 사용자 지정 이벤트의 이름 (0) | 2022.08.11 |
vuex-persisted state를 사용한 영구 상태: 다른 탭의 상태를 변환해도 첫 번째 탭의 저장 상태가 업데이트되지 않음 (0) | 2022.08.11 |
Laravel 블레이드의 Vue 구성 요소 인스턴스에 PHP 변수를 전달하는 방법은 무엇입니까? (0) | 2022.08.11 |
sleep() 뒤에 있는 알고리즘은 무엇입니까? (0) | 2022.08.11 |