zoukankan      html  css  js  c++  java
  • 调试 & 常数优化:我有特别的 debug 技巧

    rxz 的调试技巧(https://www.zhihu.com/question/60719584/answer/179363450)

    #define DEBUG printf("Passing [%s] in LINE %d
    ",__FUNCTION__,__LINE__)

     C++ 的一个特性:

    由于 C++ 中 a[b] = *(a+b) = *(b+a) = b[a]
    因此你可以用 i[a] 代替 a[i],用 1[b] 代替 b[1],多维数组同样可以,你甚至可以用 5[4[3[2[1[a]]]]] 代替 a[1][2][3][4][5]。
    用处,混乱代码 233。

    —— immortalCO(https://www.zhihu.com/question/49272859/answer/115277716)

     Fast I/O:

    inline int read() { // 快读
        int X=0,w=0;
        char ch=0;
        while(!isdigit(ch)) {
            w|=ch=='-';
            ch=getchar();
        }
        while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
        return w?-X:X;
    }
    inline double dbread() { // 小数快读
        double X=0,Y=1.0;
        int w=0;
        char ch=0;
        while(!isdigit(ch)) {
            w|=ch=='-';
            ch=getchar();
        }
        while(isdigit(ch)) X=X*10+(ch^48),ch=getchar();
        ch=getchar();
        while(isdigit(ch)) X+=(Y/=10)*(ch^48),ch=getchar();
        return w?-X:X;
    }
    inline void write(int x) { // 快些
        if(x<0) putchar('-'),x=-x;
        if(x>9) write(x/10);
        putchar(x%10+'0');
    }

     Fast Read 2

    inline int read(){
        RR int x;RR bool f;RR char c;
        for (f=0; (c=getchar())<'0'||c>'9'; f=c=='-');
        for (x=c-'0'; (c=getchar())>='0'&&c<='9'; x=(x<<3)+(x<<1)+c-'0');
        return f?-x:x;
    }

    strtol,strtoll 的用法(http://www.cnblogs.com/the-tops/p/5799547.html)

    名字: strtol, strtoll, strtoul, strtoull

    convert a string to a (signed, unsigned ) long integer string

    声明:

     #include<stdlib.h>  ( 这个是C标准库,与linux无关。这套函数是通用的。)

    long int strtol(const char *nptr, char **endptr, int base);
    long long int strtoll(const char *nptr, char **endptr, int base);
    unsigned long int strtoul(const char *nptr, char **endptr, int base);
    unsigned long long int strtoull(const char *nptr, char **endptr, int base);

    说明,第一个参数 nptr是要转化的字符串。第三个参数base说明nptr的进制。base 取值范围 0,2-36

    这几个函数会忽略nptr前面的空格( ' ', ' ', ' ' 'f', 'v' ' ' ,由isspace判定为真的字符)

    while (*nptr && isspace ( *nptr ) ) ++ nptr;

    然后 遇到非合法字符结束; 

    base = 2; 合法字符为0, 1

    base = 3; 合法字符为0,1, 2

    ...

    base = 11; 合法字符为0,1,...,9,a(A)

    ...

    base = 36;合法字符为0, 1, ...,9,a(A),...,z(Z)。

    字符 a-z,是忽略大小写的,混着来也行,例如  strtol("aA", NULL, 11) 依然能得到正确的结果。

    函数的第二个参数endptr可以为空,如果不为空,则 endptr 保存函数结束前的那个非合法字符的地址。

    如果没有合法字符,则  *endptr = nptr ,函数返回0.

    例如:

    1.

    char *endptr;
    char nptr[]="123abc";
    int ret = strtol(npstr, &endptr, 10 );

    由于10进制里没有“数字”a,所以扫描到a,结束。

    这样  ret = 123; 

     endptr = &nptr[3];  (  printf("%s", endptr); 将得到字符串 abc )

    2.

    char nptr[]=" 
    	    abc";
    int ret = strtol(nptr, &endptr, 10 );

    由于函数会忽略nptr前面的空格(' ', ' '...),所以,从字符a开始扫描,但是遇见的“第一个”即是不合法字符。

    所以函数结束。  ret=0; endptr = nptr; 

    以下的讨论,会认为 nptr 前面没有空格,

    即执行过类似于 while (*nptr &&isspace ( *nptr ) ) ++ nptr; 

    如果base 为0.则分3种情况:

    如果nptr 以0x(零x)开头,则把nptr当成16进制处理。

    如果npstr以0(零)开头,则把nptr当成8进制处理。

    否则,把nptr当成10进制。

    对于函数执行错误,如传了一个非合法base,则errno会设置相关值

    —— http://zengwu3915.blog.163.com/blog/static/27834897201262562912597/

    奇♂技淫♂巧。。。


    Post author 作者: Grey
    Copyright Notice 版权说明: Except where otherwise noted, all content of this blog is licensed under a CC BY-NC-SA 4.0 International license. 除非另有说明,本博客上的所有文章均受 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 保护。
  • 相关阅读:
    【转】iPython入门技巧
    Python——IPython和NumPy
    Python——类与对象,异常处理
    Python——函数,模块,简单文件读写
    给对象的key 设置成变量
    antd 表单validateFields validateFieldsAndScroll方法不执行
    css 设置禁用
    where与having区别
    重温robotframework--day1
    Linux下查看文件内容的命令
  • 原文地址:https://www.cnblogs.com/greyqz/p/debug.html
Copyright © 2011-2022 走看看