• 【更新中】C语言语法汇总(仅记录遇到的坑)


    宏展开字符串

    //一般的 字符串展开宏 的定义方式
    #define STR(s) #s
    //或者,兼容STR内部宏展开的方式
    #define _STR(s) #s
    #define STR(s) _STR(s)
    
    //!!!划重点了!!!#标记的后接的参数必须只能是传进来的形参!!!
    //于是我倒腾了一晚上以为能用一个宏来展开"1.2.3.0"这样的一个字符串最终需要调用两个宏实现
    #define VERSION1 1
    #define VERSION2 2
    #define VERSION3 3
    #define VERSION4 0
    
    #define MainValueFileVersion MainValueProductVersion
    #define OtherValueFileVersion OtherValueProductVersion
    
    //我的目的是让 MainValueProductVersion 展开为 1,2,3,0 而 OtherValueProductVersion 展开为 “1.2.3.0” 
    #define MainValueProductVersion VERSION1,VERSION2,VERSION3,VERSION4 
    #define OtherValueProductVersion VERSION1.VERSION2.VERSION3.VERSION4 
    
    //最终调用方式,可以用'gcc -E 文件名'进行查看 
    STR(OtherValueProductVersion)

    结构体赋值

    typedef struct{
        int a,b,c;
    }A;
    
    A struct1 = {1,2,3};    //gnu++11支持,gnu11不支持
    A struct2 = (A){1,2,3};    //gnu++11、gnu11支持
    

     定义和使用二维数组指针

    int   a[ROW_NUM][COLUMN_NUM];
    int **p1 = a;    //XXX: expected expression
    int (*p2)[COLUMN_NUM] = a;    //correct
    

     perror的函數原型,不接受其他參數

    void perror(const char * str);
    

    如果死循环内的usleep的时间太短,一次循环历时太短,系统的使用率会迅速填满。猜测是因为usleep时间太短(之前usleep的时间是20),造成死锁。

    while(flag)
        usleep(20);  //WRONG WAY
    

    不同线程中使用malloc动态分配内存,即便是对文件全局变量进行赋值,依然不能改变指针指向的动态空间。

    代码暂时忽略
    造成原因,暂分析为malloc函数是线程安全的,造成不同线程对同一全局变量的赋值没有生效(很是想不通,希望广大网友慷慨解读)

    linux 系统下的 printf输出64整形方式(gcc 5.3 -std=gnu11 + centOS 7)

    uint64_t a = 123456789012;
    printf("a:=%llu", a);
  • 相关阅读:
    回到顶部
    angularjs 复选框 单选框
    关于angularjs的ng-repeat指令
    JS字符串对象
    JS的控制语句与异常
    JS的运算符
    JS的引入方式和基础规范
    z-index及透明度opacity,利用overflow设置头像
    css的定位
    css的float属性及清除浮动
  • 原文地址:https://www.cnblogs.com/pureLaw/p/6925705.html
Copyright © 2020-2023  润新知