반응형
C 프리프로세서를 사용하여 문자열에 int 연결
어떻게 연결하면 좋을지 고민하고 있어요#define
'에 삽입했다.#define
C 프리프로세서를 사용한 문자열.제 컴파일러는 CentOS 5의 GCC 4.1입니다.이 솔루션은 MinGW에도 유효합니다.
문자열에 버전 번호를 추가하고 싶은데 작동하려면 문자열로 정의된 버전 번호 복사본을 만드는 방법밖에 없습니다.
내가 찾을 수 있는 가장 가까운 것은 매크로 주장을 인용하는 방법이었지만, 그것은 효과가 없다.#define
s
이것은 동작하지 않습니다.
#define MAJOR_VER 2
#define MINOR_VER 6
#define MY_FILE "/home/user/.myapp" #MAJOR_VER #MINOR_VER
이 기능이 없으면 동작하지 않습니다.#
값이 수치이기 때문에, 그 값이 다음의 어느 쪽인가로 확대됩니다."/home/user/.myapp" 2 6
유효한 C가 아닙니다.
이것은 동작합니다만, 버전 정의의 카피가 필요한 것은 아닙니다.숫자로도 필요하기 때문입니다.
#define MAJOR_VER 2
#define MINOR_VER 6
#define MAJOR_VER_STR "2"
#define MINOR_VER_STR "6"
#define MY_FILE "/home/user/.myapp" MAJOR_VER_STRING MINOR_VER_STRING
기존 C 프리프로세서 질문...
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)
#define MAJOR_VER 2
#define MINOR_VER 6
#define MY_FILE "/home/user/.myapp" STR(MAJOR_VER) STR(MINOR_VER)
인다이렉션의 추가 레벨에 의해 프리프로세서는 매크로가 문자열로 변환되기 전에 매크로를 확장할 수 있습니다.
MY_FILE을 파라미터 매크로로 쓰는 방법이 있습니다.
#define MY_FILE(x,y) "/home..." #x #y
편집: "Lindydancer"에서 설명한 바와 같이 이 솔루션은 인수에서 매크로를 확장하지 않습니다.보다 일반적인 솔루션은 다음과 같습니다.
#define MY_FILE_(x,y) "/home..." #x #y
#define MY_FILE(x,y) MY_FILE_(x,y)
BOOST_PP_STRINGIZE를 사용하면 다음과 같이 할 수 있습니다.
#define MAJOR_VER 2
#define MINOR_VER 6
#define MY_FILE "/home/user/.myapp" BOOST_PP_STRINGIZE(MAJOR_VER) BOOST_PP_STRINGIZE(MINOR_VER)
언급URL : https://stackoverflow.com/questions/5459868/concatenate-int-to-string-using-c-preprocessor
반응형
'programing' 카테고리의 다른 글
정적 Constatic vs #syslog (0) | 2022.08.27 |
---|---|
함수 포인터의 역참조는 어떻게 이루어집니까? (0) | 2022.08.27 |
FD_CLOEXEC fcntl() 플래그의 기능은 무엇입니까? (0) | 2022.08.27 |
Java에서 Atomic Reference를 사용하는 경우 (0) | 2022.08.27 |
vuejs 2.0 구성 요소가 모듈 vuex에서 작업 메서드에 액세스하지 못했습니다. (0) | 2022.08.27 |