반응형
C 전처리기를 사용하여 int를 문자열에 연결
C 전처리기를 사용하여 #define
'd int를 #define
'd 문자열에 연결할 수있는 방법을 알아 내려고합니다 . 내 컴파일러는 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 가 아닌로 확장되기 때문에 s 없이는 작동하지 않습니다 .
이것은 작동하지만 버전 정의의 사본을 갖는 것을 좋아하지 않습니다. 숫자로도 필요하기 때문입니다.
#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' 카테고리의 다른 글
Android에서 버튼과 같은 이미지보기 클릭 효과를 제공하려면 어떻게해야합니까? (0) | 2020.10.11 |
---|---|
포드 설정을 실행하면 "잘못된 인터프리터 : 해당 파일이나 디렉토리가 없습니다." (0) | 2020.10.11 |
size_t와 unsigned int의 차이점은 무엇입니까? (0) | 2020.10.10 |
Avro 대 Parquet (0) | 2020.10.10 |
Python : 'from X import Y'로 가져온 컴포넌트 Y를 다시로드 하시겠습니까? (0) | 2020.10.10 |