一些奇技淫巧
利用def来控制编译是否使用freopen
编译的时候加上-DDEBUG选项就可以控制freopen()
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
#ifdef DEBUG
    freopen("input", "r", stdin);
#endif
    return 0;
}
使用const定义常量,而非def
使用const好处在于,可以确定变量的类型,而不是单纯的一段代码。
段错误和栈溢出
使用size命令来查看执行文件中段大小
   text       data        bss        dec        hex    filename
   1320        280          4       1604        644    3-8
分别是正文段,数据段和bss段。
此外,局部变量也是存放在堆栈段的,所以栈溢出不见得是递归调用过多,也可能是局部变量太大(Stack Overflow)。
ulimit 查看栈大小
Linux的栈大小通过ulimit命令修改,不过在比赛中似乎是不允许的。
使用ulimit -s命令查看栈大小,单位是KB
INF的取值
一般是0x3f3f3f3f, 可以用memset来赋值
assert.h
利用assert.h调试,通过检测变量值来确定程序运行过程中的问题
#include <stdio.h>
#include <assert.h>
int main()
{
    int x = -1;
    assert(x > 0);
    return 0;
}
printf的进制利用
x, o, d
// 大写小写16进制
printf("%X", d);
printf("%x", d);
// 效果不同
printf("%02X", d);
printf("%.2X", d);