/* * 宏的数字变成字符串 * 1. 宏中的#的功能是将其后面的宏参数进行字符串化操作(Stringizing operator) * 简单说就是在它引用的宏变量的左右各加上一个双引号 * 2. #@是加单引号(Charizing Operator)gcc/clang并不支持它 * 3. 宏中遇到#或##时就不会再展开宏中嵌套的宏了, 需要使用一个中间转换宏达到展开宏的目的 * 4. ##的功能,它可以拼接符号(Token-pasting operator) */ static void macro_as_part_of_string(void) { #define CONFIG_BAUDRATE 2000000 #define __STRING(x) #x /* (#x) is invalid */ #define STRING(x) __STRING(x) #define BOOTARGS_CONSOLE "console=ttyS3,"STRING(CONFIG_BAUDRATE)"n8 " printf("%s\n", BOOTARGS_CONSOLE); char *pChar = "hello"; char *pChar2 = __STRING(hello); /* hello -> "hello" */ if(!strcmp(pChar, pChar2)) { printf("pChar:%s is equal to pChar2:%s\n", pChar, pChar2); } /* gcc/clang not support #@ #define TOCHAR(x) #@x char c = TOCHAR(A); printf("c is %c\n", c); */ printf("%s\n", __STRING(__FILE__)); printf("%s\n", STRING(__FILE__)); #define paster(n) printf("token"#n" = %d\n", token##n) int token9 = 100; paster(9); #define WIDEN2(x) L##x #define WIDEN(x) WIDEN2(x) #define __WFILE__ WIDEN(__FILE__) printf("%s\n", /*L*/"hello"); }
/*! Inserts the copied data into the given node. \note The mime-type for the data must be <tt>"application/x-qt-bauhaus"</tt>, otherwise the paste will fail. \param transferData The clip-board contents to paste. \param intoNode The node into which the clip-board contents are to be pasted. \return true if successful, false otherwise. */ bool ModelRewriter::paste(QMimeData *transferData, const InternalNode::Pointer &intoNode) { if (!transferData) return false; if (intoNode.isNull() || !intoNode->isValid()) throw InvalidModelNodeException(__LINE__, Q_FUNC_INFO, __FILE__); Paster paster(transferData, intoNode); if (paster.doPaste(m_modelToTextMerger)) { if (!modificationGroupActive()) { m_modelToTextMerger.applyChanges(*m_textModifier); } return true; } else { m_modelToTextMerger.clear(); return false; } }
bool menu() { int a = 0; while(a != 2) { printf("****************************************** \n"); printf("** 1 - paster ** \n"); printf("** 2 - exit ** \n"); printf("****************************************** \n"); printf("Please enter the number for the command \n"); scanf("%d", &a); switch(a) { case 1: paster(); break; default: printf("Please enter an available number for a command!"); break; } } return 0; };
int main(){ int token9 = 9; paster(9); return 0; }