#define DECLARE_DELETE_PTR(type) \
void DeletePtr_##type(string &operand) \
{\
}\
C++의 매크로 정의에서 ##
의 의미는 무엇입니까?C++의 정의 코드에서 ##의 의미는 무엇입니까?
다음 코드와의 차이점은 무엇입니까?
는#define MAKE_STRINGS(VAR) #VAR
그것은 단지 하나의 #이지만, 전자는 두 개의 #
#define DECLARE_DELETE_PTR(type) \
void DeletePtr_##type(string &operand) \
{\
}\
C++의 매크로 정의에서 ##
의 의미는 무엇입니까?C++의 정의 코드에서 ##의 의미는 무엇입니까?
다음 코드와의 차이점은 무엇입니까?
는#define MAKE_STRINGS(VAR) #VAR
그것은 단지 하나의 #이지만, 전자는 두 개의 #
그것은 당신이 매개 변수 type
통과 값을 연결 ...
DECLARE_DELETE_PTR(gremlin)
확장겠습니까. 다음은 예입니다
DECLARE_DELETE_PTR(MyType)
가 //이 (다른 사람의 사이에)
void DeletePtr_MyType(string &operand)
{
}
그것은 두 개의 토큰을 연결하는 D 파일러를 요청합니다.
#define DECLARE_DELETE_PTR(type) \
void DeletePtr_##type(string &operand) \
{\
}\
DECLARE_DELETE_PTR(int)
void DeletePtr_int(string &operand)
//^^^ the macro argument is int, so the precompiler replaces it here
{
}
는 매크로 코드에서 인수 type
은 명령의 나머지 부분과 연결됩니다. 매크로 인수가 int
인 경우 위의 결과를 제공하는 단순한 결합입니다. 전 처리기 지시문이므로 컴파일 할 때 전적으로 발생합니다.
리눅스를 사용하는 경우 cpp
명령어를 사용하여 더 잘 이해하고 검토하는 것이 좋습니다.
두 번째 질문에서 두 가지 질문은 단순히 두 개의 다른 연산자입니다.
마찬가지로 이름에서 알 수 있듯이 -> 인수를 C 문자열로 바꿉니다 (방금 시도했습니다). 예를 들어 :
std::cout << "Hello World" << std::endl
을 또는 더 흥미로운 :
std::cout << MAKE_STRINGS(Hello World) << std::endl;
가로 변신 것
std::cout << MAKE_STRINGS("Hello" World) << std::endl;
가된다 :
std::cout << "\"Hello\" World" << std::endl;
를 그것은 또한 탈출을 담당 나타납니다 특수 문자들 나는 잘못 될 수 있습니다 - 그건 3 분 전에 실험에서 나온 것입니다. ## 연산자는 두 개의 토큰을 연결하는 데 사용됩니다
void DeletePtr_gremlin(string &operand)
{
}
참조로 확장 할 [C 매크로 지침 (http://stackoverflow.com/questions/8685619/macro-directives (여러 가지 해답에 대한 주석에서 언급 한 바와 같이 단일 문자열로 된) #와 함께 [C 전 처리기와 연결] (http : // stackoverflow)에 대한 설명을 위해 -in-c-my-code-example-doesnt- .com/questions/1489932/c-preprocessor-and-concatenation /)를 사용하여이 질문에 대한 답을 얻을 수 있습니다. –