宏表达式在预编译期被处理,编译器不知道宏表达式的存在。 宏表达式没有任何的调用开销 宏表达式中不能出现递归定义。 C语言中强大的内置宏 注意:宏定义对空格比较敏感 #undef 取消前面定义的宏 条件编译是预编译指令命令,用于控制是否编译某段代码。 条件编译的意义: 1.条件编译使得我们可以按不同的 ...
分类:
其他好文 时间:
2017-09-15 16:42:52
阅读次数:
176
原文:#ifndef HeaderName_h #define HeaderName_h #endif 使用详解 想必很多人都看到过头文件中写有:#ifndef HeaderName_h #define HeaderName_h // 这里面通常写各种宏定义、其他头文件的包含 #endif 这样做的 ...
分类:
其他好文 时间:
2017-09-15 12:12:03
阅读次数:
109
#include<stdio.h>
#defineSTR(s)#s
#defineCONS(a,b)(int)(a##e##b)
intmain()
{
printf(STR(vck));
printf("\n");
//vck
//2000
printf("%d\n",CONS(2,3);
return0
}宏定义中,#把宏参数变为一个字符串,用##把两个宏参数贴合在一起。
分类:
编程语言 时间:
2017-09-14 18:47:46
阅读次数:
100
最近看到C语言的项目中在宏定义中使用了do...while(0),感到是个知识点,特来总结。 先看这句话:do{...}while(0)在C中是唯一的构造程序,让你定义的宏总是以相同的方式工作,这样不管怎么使用宏(尤其在没有用大括号包围调用宏的语句),宏后面的分号也是相同的效果。这句话的意思是说,在 ...
分类:
编程语言 时间:
2017-09-13 11:57:26
阅读次数:
162
这篇对整数的一些基本运算产生的溢出问题进行分析。 当你进行加减乘除运算的时候,如果这个数字很大,运算产生的结果就可能会出乎你最初设计程序的预料,这对程序来说是一种很可怕的漏洞,这让一些恶意的访问者对程序作出一些破坏性的事情,这样造成的危害可能是很大的。 这里先定义一些宏定义作为返还值: 当进行无符号 ...
分类:
其他好文 时间:
2017-09-13 01:31:33
阅读次数:
232
宏定义 #define 和常量 const 的区别 类型和安全检查不同 宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误; const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查 编译器处理不同 宏定义是一个"编译时"概念,在预处理阶段展开,不能 ...
分类:
其他好文 时间:
2017-09-11 12:26:18
阅读次数:
182
//描述:包含程序所使用的头文件和命名空间#include <opencv2/opencv.hpp>#include "opencv2/core/core.hpp"#include "highgui.h"#include "opencv2/imgproc/imgproc.hpp" using nam ...
分类:
其他好文 时间:
2017-09-10 23:44:20
阅读次数:
253
今天焊接CC2530,其中有个模块下载程序(协议栈程序),无法创建也无法加入网络。 第一步先检查32MH 晶振是否启动,用basice 程序看uart,发现可以正常打印log。 第二步,在线调试,看看程序跑到那里了。 在看里面果然有while 循环 现在怀疑是32K晶振问题了,把 32K晶振宏定义修 ...
分类:
其他好文 时间:
2017-09-10 22:15:08
阅读次数:
239
strcmp,stricmp:原型:int strcmp(const void *s1, const void *s2);功能:比较字符串s1和s2是否相同,区分大小写。 说明:如果s1=s2则返回零,否则返回非零值。 原型:int stricmp(char s1,char s2);功能:比较字符串 ...
分类:
其他好文 时间:
2017-09-07 21:25:21
阅读次数:
176