C语言几个特殊的宏

C/C++几个预定义的调试宏

  • FILE 记录文件的路径加名称
  • FUNCTION 当前所在函数名
  • LINE 记录文件已经被编译的行数
  • DATE 记录文件的编译日期
  • TIME 记录文件的编译时间

C语言中,#和##用法

  • C语言中,引号引起来的字符串,中间以空格分开,编译器(预处理器)会自动将其生成一个字符串。
  • #和##都是在宏定义中处理字符串的符号。
  • 将其后跟的宏定义变量替换并添加引号。

  • 将其后的宏定义变量替换后与前面的东西连接。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>

    #define QPRINT(IN) printf("QQQ:%s, " #IN ",%s\n", __FUNCTION__, __FILE__)
    #define QCAT(a,b) a##b

    int main() {
    int xy = 111;
    QPRINT(55);
    printf("%d\n",QCAT(x,y));
    return 0;
    }

输出:

1
2
QQQ:main, 55,main.cpp
111

vim中跨文件多行拷贝

1、用vim打开一个文件,例如:original.trace

2、在普通模式下,输入:”:sp”(不含引号)横向切分一个窗口,或者”:vsp”纵向切分一个窗口,敲入命令后,你将看到两个窗口打开的是同一个文件

3、在普通模式下,输入:”:e new.trace”,在其中一个窗口里打开另一个文件

4、切换到含有源文件(original.trace)的窗口,在普通模式下,把光标移到你需要复制内容的起始行,然后输入你想复制的行的数量(从光标所在行往下计算),在行数后面接着输入yy,这样就将内容复制到临时寄存器里 了(在 普通模式下ctrl+w,再按一下w,可以在两个窗口之间切换)

5、切换到目标文件(new.trace)窗口,把光标移到你接收复制内容的起始行,按一下p,就完成复制了。