6
#define NAME(x) TEXT(x) #define TEXT(quote) __TEXT(quote) // r_winnt #define __TEXT(quote) quote // r_winnt 

The above is from winNT.h, isn't NAME("Virtual Cam") the same as "Virtual Cam",what's the point to use this macro?

2 Answers 2

6

__TEXT macro expansion is selected based on whether UNICODE flag is defined or not. If not it just expands to quote else it will append L to the quote so that it becomes L"Virtual Cam" . This string is interpreted as a wide char string.

Sign up to request clarification or add additional context in comments.

4 Comments

Is L in L"Virtual Cam" a native syntax of C++ or defined in some header files?
I think it's native C++ code, since one can write wchar_t* pwstr = L"Test";
the C++ ISO Standard referes to wchar_t as C native ;-). So L is not C++ native code, but C native code ;-)
The 'L' prefix to a string or character literal is in both the C and C++ language standards - it's how wide-character literals are formed in the source.
1

Depends on if your system is #defined to use Unicode. Then it will automatically change the literal for you to be a wide literal instead of a char literal.

2 Comments

But I don't see that logic above,how does it happen?
Where “use Unicode” means “use UTF-16 encoded Unicode,” since that is the Unicode encoding best supported by Microsoft tools and APIs.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.