几个常用道的macro
1、macro
(1)#error msg 指令使編譯器停止執行並打印一條語句,
(2)printf("%d,%s",_LINE_,_FILE_)打印當前行號和文件名
(3)#pragma arg 設置了編譯器所使用的條件.
(4)#str 將字符串放入被引號括起來的字符串中,如:

#define pr(s) puts(#s)
pr(hello world);->puts("hello world");

(5)將兩段文字拼接在一起,如:

#define call(verb,adj,do) verb##_##adj(do)
call(shrink, all, trees);->shrink_all(trees);
#define SIGNAL(x) "SIGNAL:" #x
SIGNAL(finishedParsing()) 

2、給結構賦初值

struct AAA
{
AAA():a(){}
int a;
int b;
};

3、使用macro 批定義變量

#define STR_EACH_DECLARE(macro)\
macro(age)\
macro(name)
#define STR_DECLARE(name) char name ## Str;
STR_EACH_DECLARE(STR_DECLARE)
void main()
{
;
nameStr='a';
ageStr='b';
}

4、定位參數
5、指針和常量

const type *
type const *
type * const

6、友元函數和友元類
7、拷貝構造函數和賦值語句
8、#pragma once 用字符串调用同名的函数

str.def:
my_Macro(func1),
my_Macro(func2)

str.h:
#pragma once
void func1();
void func2();
#define my_Macro(a) a
typedef void (*func)();
func fArray[]=
{
    #include "str.def"
};
#undef my_Macro
#define my_Macro(a) #a
char* str[]=
{
    #include "str.def"
};

str.cpp:
#include "str.h"
#include "string.h"

void func1(){}
void func2(){}
void main()
{
    char call[]="func1";
    ]);
    ; i<len; i++)
    {
        )
        {
            fArray[i]();
            break;
        }
    }
}

几个常用道的macro的更多相关文章

  1. flasCC技术点记录

    [待测试特性] 一.C接口导出相关 1.重载函数. 2.虚函数. 3.template相关 二.内存相关 1.as直接往c分配的内存写数据. 2.c直接往as对象写数据. 三.C访问AS 1.访问as ...

  2. FreeMarker三宗罪之优缺点

    FreeMarker是Quake Wang推荐我使用的.刚学FreeMarker的时候,发现freemarker真的很棒!简单易用,功能强大.但是用它做了几个项目以后开始不爽了. 一宗罪:freema ...

  3. 程序员必须知道的HTML常用代码有哪些?

    HTML即超文本标记语言,是目前应用最为广泛的语言之一,是组成一个网页的主要语言.在现今这个HTML5华丽丽地占领了整个互联网的时候,如果想要通过网页抓住浏览者的眼球光靠因循守旧是不行的,程序猿们需要 ...

  4. 你应该知道的CSS2.0中最常用的18条技巧

    一.使用css缩写 使用缩写可以帮助减少你CSS文件的大小,更加容易阅读.  具体内容请浏览:CSS常用缩写语法 二.明确定义单位,除非值为0. 忘记定义尺寸的单位是CSS新手普遍的错误.在HTML中 ...

  5. 关于宏MACRO,我们需要知道的事

    一.先从最宏观的角度来了解宏,这里的宏观角度是指程序的运行流程: 1,提交代码后,SAS先把代码读取储存到堆栈中: 2,用文本扫描插件来扫描堆栈中的代码,从上到下,从左到右: 3,扫描到一个分号,则编 ...

  6. 常用Macro

    [enable_if] SFINAE是英文Substitution failure is not an error的缩写. 这句话什么意思呢?当调用模板函数时编译器会根据传入参数推导最合适的模板函数, ...

  7. 迟早要知道的JS系列之常用数组方法

    常用数组方法 一.不会改变原始数组的方法: 即访问方法,下面的这些方法绝对不会改变调用它们的对象的值,只会返回一个新的数组或者返回一个其它的期望值. 1. concat() ** 语法:** Java ...

  8. 前端er必须知道的Git地址及常用工具地址

    商城篇(找工作必练) 开源商城 推荐指数:5星,掌握了它,可以说,今后工作中的各种需求都不是问题,工作1~2年的也可以学习其中的思路(建议收藏). 这是一个集小程序/公众号/app为一体的商城系统,包 ...

  9. VIM-不常用或不知道的技巧

    cc 清除一行 并在本行编辑, 同理 cw :32,65d 多行删除 g/pattern/d 删除包含特定字符的行 v/pattern/d 删除不包含指定字符的行 等同于 g!/pattern/d y ...

随机推荐

  1. codecomb 2090【最小乘积路】

    题目描述 给定n个点的带权有向图,求从1到n的路径中边权之积最小的简单路径. 输入格式 第一行读入两个整数n,m,表示共n个点m条边. 接下来m行,每行三个正整数x,y,z,表示点x到点y有一条边权为 ...

  2. java实现xml-rpc客户端和服务端

    客户端代码: package test_xmlrpc.test; import java.net.URL;import java.util.ArrayList;import java.util.Lis ...

  3. Pascal's Triangle 解答

    Question Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows  ...

  4. Linux进程通信----匿名管道

    Linux进程通信中最为简单的方式是匿名管道 匿名管道的创建需要用到pipe函数,pipe函数参数为一个数组表示的文件描述字.这个数组有两个文件描 述字,第一个是用于读数据的文件描述符第二个是用于写数 ...

  5. 【转】__attribute__机制介绍

    1. __attribute__ GNU C的一大特色(却不被初学者所知)就是__attribute__机制. __attribute__可以设置函数属性(Function Attribute).变量 ...

  6. Linux 多线程开发

    在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死.在被其他线程回收之前,它的存储器资源(例如栈)是不释放的.相反, ...

  7. cocos2dx lua 学习笔记(二)

    安装开发环境 sublime - http://www.sublimetext.com/2 package control - http://packagecontrol.io/installatio ...

  8. Trie树|字典树(字符串排序)

    有时,我们会碰到对字符串的排序,若采用一些经典的排序算法,则时间复杂度一般为O(n*lgn),但若采用Trie树,则时间复杂度仅为O(n). Trie树又名字典树,从字面意思即可理解,这种树的结构像英 ...

  9. FP-Growth算法之频繁项集的挖掘(python)

    前言: 关于 FP-Growth 算法介绍请见:FP-Growth算法的介绍. 本文主要介绍从 FP-tree 中提取频繁项集的算法.关于伪代码请查看上面的文章. FP-tree 的构造请见:FP-G ...

  10. MVC之MVCSQO方法查询、排序、分页、投影