• C语言编程小知识分享,希望对你有用


     

    在LPC2200系列中:

    可以通过过下面的程序延迟10毫秒:

    for(i=0;i<200;i++)

    {

    for(j=0;j<200;j++);

    }

    通过下面语句将一个16位的变量放在两个8位的变量中。

    //IP数据报总长度高字节

    IpHeadUint8[10]=(IpHead.e_ip.Crc&0xff00)>>8;

    //IP数据报总长度低字节

    IpHeadUint8[11]=IpHead.e_ip.Crc&0x00ff;

    在对全部数组元素赋初值时,可以不指定数组长度。

    eg;inta={1,2,3,4,5};

    但如果当输出第a[5]以上的元素时,系统回输出随机数值,所以使用此方法时,不能使用超过初始值元素以上的元素。

    用或运算,可使某位置为1,其它位不变

    eg: PINSEL0 |= 0x00000005; //设置串口引脚

    使第0位和第二位置一,其他位不变。

    C语言符号优先级:

    1>复合赋值运算符号:

    a+=3*5;

    等价于a=a+(3*5);

    关键字volatile的用法

    volatile变量可能用于如下几种情况:

    1>设备的硬件寄存器(如:状态寄存器)

    2>一个中断服务子程序中会访问到的全局变量

    3>多线程应用中被几个任务共享的变量。


    调试相关的宏

    在Linux使用gcc编译程序的时候,对于调试的语句还具有一些特殊的语法。gcc编译的过程中,会生成一些宏,可以使用这些宏分别打印当前源文件的信息,主要内容是当前的文件、当前运行的函数和当前的程序行。具体宏如下:

    __FILE__ 当前程序源文件 (char*)
    __FUNCTION__ 当前运行的函数 (char*)
    __LINE__ 当前的函数行 (int)

    这些宏不是程序代码定义的,而是有编译器产生的。这些信息都是在编译器处理文件的时候动态产生的。

    # 字符串化操作符

    在gcc的编译系统中,可以使用#将当前的内容转换成字符串。程序示例:

    #include

    #define DPRINT(expr) printf("

    %s = %d\n", #expr, expr);

    int main(void)
    {
    int x = 3;
    int y = 5;

    DPRINT(x / y);
    DPRINT(x + y);
    DPRINT(x * y);

    return 0;
    }

    执行结果:

    deng@itcast:~/tmp$ gcc test.c
    deng@itcast:~/tmp$ ./a.out

    x / y = 0
    x + y = 8
    x * y = 15

    #expr表示根据宏中的参数(即表达式的内容),生成一个字符串。该过程同样是有编译器产生的,编译器在编译源文件的时候,如果遇到了类似的宏,会自动根据程序中表达式的内容,生成一个字符串的宏。


    关键字

    关键字是C语言中具有特殊功能的保留标示符,按照功能可分为

    1). 数据类型(常用char, short, int, long, unsigned, float, double)

    2). 运算和表达式( =, +, -, *, while, do-while, if, goto, switch-case)

    3). 数据存储(auto, static, extern,const, register,volatile,restricted),

    4). 结构(struct, enum, union,typedef),

    5). 位操作和逻辑运算(<<, >>, &, |, ~,^, &&),

    6). 预处理(#define, #include, #error,#if...#elif...#else...#endif等),

    7). 平台扩展关键字(__asm, __inline,__syscall)

    这些关键字共同构成了嵌入式平台的C语法。

    (以上图片及文字均来源于网络,如有侵权,联系删除)

  • 相关阅读:
    MFC使用system有弹黑窗的解决 用WinExec(szBuffer, SW_HIDE);代替
    (STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(4)使用LVGL
    linux系统编程7-锁、信号量、线程同步
    关于对Java中volatile关键字的理解与简述
    编程逻辑入门必备:演绎推理
    操作系统(一):什么是操作系统
    对分库分表进行批量操作
    国产720亿参数开源免费模型来了!对标Llama2 70B,一手实测在此
    python基础05——字典:dict及集合:set,看这篇文章就够了
    【洛谷 P1182】数列分段 Section II 题解(二分答案+递归)
  • 原文地址:https://blog.csdn.net/m0_69234258/article/details/127700493