当前位置: 首页 > wzjs >正文

佛山市做网站网站建设项目心得体会

佛山市做网站,网站建设项目心得体会,山东济南做网站公司,网络文化经营许可证经营范围0 资料 最值宏do{}while(0)的宏封装技巧 1 最值宏 - C最值的宏,在两个头文件中,分别为cfloat和climits。其中,float的最值宏在cfloat中,且cfloat没有负值的最小宏,而其他char、int和double是在climits中。如下// --…

0 资料

  • 最值宏
  • do{}while(0)的宏封装技巧

1 最值宏

- C++最值的宏,在两个头文件中,分别为cfloat和climits。其中,float的最值宏在cfloat中,且cfloat没有负值的最小宏,而其他char、int和double是在climits中。如下
// --------------------------------
#include <limits.h>CHAR_MIN        char的最小值
SCHAR_MAX        signed char 最大值
SCHAR_MIN        signed char 最小值
UCHAR_MAX        unsigned char 最大值SHRT_MAX        short 最大值
SHRT_MIN        short 最小值
USHRT_MAX        unsigned short 最大值INT_MAX        int 最大值
INT_MIN         int 最小值
UINT_MAX        unsigned int 最大值
UINT_MIN        unsigned int 最小值LONG_MAX        long最大值
LONG_MIN        long最小值
ULONG_MAX        unsigned long 最大值double d1 = DBL_MIN;
double d2 = DBL_MAX;
long ln1 =  LONG_MAX;
long ln2 =  LONG_MIN;
long long lln1 = LONG_LONG_MAX;
long long lln1 = LONG_LONG_MIN;// --------------------------------
#include <float.h> 
FLT_MANT_DIG      float 类型的尾数
FLT_DIG         float 类型的最少有效数字位数
FLT_MIN_10_EXP     带有全部有效数的float类型的负指数的最小值(以10为底)
FLT_MAX_10_EXP      float类型的正指数的最大值(以10为底)
FLT_MIN         保留全部精度的float类型正数最小值
FLT_MAX         float类型正数最大值

2 定位宏

  • FILE:文件名
  • FUNCTION:函数名
  • LINE:行数

3 比较宏

  • 在C/C++中,浮点数的表示是不准确的。float、double分别遵循R32-24,R64-53的标准。他们尾数的位数分别是23、52,即误差在2-23,2-52.所以float的精度误差在1e-6,double的精度误差在1e-15。因此,对于浮点数的比较不能单纯使用==与!=来比较。通常使用以下的比较方法:
    • 所以判断浮点数是否等于0:
      • 要判断一个单精度浮点数是否等于0:if(fabs(f_float) <= 1e-6);
      • 要判断一个双精度浮点数是否等于0:if(fabs(d_double) <= 1e-15);
    • 所以判断两个浮点数相等:
      • 要判断两个单精度浮点数是否相等:if(fabs(f1_float - f2_float) <= 1e-6);
      • 要判断两个双精度浮点数是否相等:if(fabs(d1_double - d2_double) <= 1e-15);
    • 注意:
      • 浮点数的绝对值用fabs(整型绝对值是abs)
      • fabs与abs是在cmath头文件中

4 连接宏

4.1 #运算符

#运算符用于创建字符串,简单说就是在它引用的宏变量的左右各加上一个双引号。#运算符后面应该跟一个形参(中间可以有空格或Tab),

如定义好#define STRING(x) #x之后,下面二条语句就等价。

char *pChar = "hello world";
char *pChar = STRING(hello world);

4.2 #@运算符

在函数式宏定义中,#@运算符用于创建一个字符,如

#define makechar(x)  #@xa = makechar(b);

预处理之后是 a = ‘b’;

4.3 ##运算符

##运算符把前后两个预处理Token连接成一个预处理Token,和#运算符不同:##运算符不仅限于函数式宏定义,变量式宏定义也可以用。例如:

#define CONCAT(a, b) a##b
CONCAT(con, cat)

预处理之后是concat。再比如,要定义一个宏展开成两个#号,可以这样定义:

#define HASH_HASH # ## #

注意

凡是宏定义里有用**#或##的地方宏参数是不会再展开**,例如**_STRI(INT_MAX)中的INT_MAX就不会被展开为2147483647**。

如果想要使其中的宏参数展开,则需要多加一层中间转换宏: #define STRI(s) _STRI(s)。加这层宏的用意是把所有宏的参数在这层里全部展开,那么在转换宏里的宏就能得到对应的宏参数。

#include<stdio.h>
#include<iostream>
using namespace std;#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)#define A(x) T_##x
#define B(x) #@x
#define C(x) #x#define WARN_IF(EXP) if(EXP) cerr << #EXP << endl;
#define paster( n ) cout << "token" << #n << " = " << n << endl;
#define _CONS(a, b) int(a##+##b)
#define _STRI(s) #s
#define STRI(s) _STRI(s)void test_sharp_symbol()
{printf("%s\n", h(f(1, 2))); //输出:12printf("%s\n", g(f(1, 2))); //输出:f(1,2)printf("%s\n", h(A(1)));    // A(1)------〉T_1printf("%d\n", B(1));       // B(1)------〉'1'printf("%s\n", C(1));       // C(1)------〉"1"int div = 0;WARN_IF(div == 0);              //输出: div == 0paster(9);                      //输出: token9 = 9cout << _CONS(1+2, 2) << endl;  //输出: 3cout << _STRI(INT_MAX) << endl; //输出: INT_MAXcout << STRI(INT_MAX) << endl; // prints : 2147483647
}
  • Token 是程序中对编译器有意义的最小元素。Token 可分类如下:
    • Keywords
    • Identifiers
    • Constants
    • Strings
    • Special Symbols
    • Operators


自定义宏

易错点

  • 宏函数,要使用do{}while(0)的技巧,将函数体存为复合语句,相当于单条语句。避免宏替换对一些语句造成执行逻辑的错误,例如if、while等,参考博客,例如
#ifndef xxx
#defind xxx(v) do{...;...;}while(0)
#endif

注意,while后面不要加分号( ; )。

  • 宏函数中,要注意多次替换输入参数的问题。如果输入参数是个函数,而该参数在宏函数体中出现多次,则函数体会被实现多次,这是很严重的错误。

文章转载自:

http://zk7FJmt0.xkwyk.cn
http://Ae8XpjJq.xkwyk.cn
http://x5SPx9bA.xkwyk.cn
http://rduq1FVQ.xkwyk.cn
http://Gg1yQVhA.xkwyk.cn
http://1KHyXapr.xkwyk.cn
http://MSpCfClV.xkwyk.cn
http://KQjZxtjq.xkwyk.cn
http://grsBrEOy.xkwyk.cn
http://EsVubBkd.xkwyk.cn
http://smYSs5WF.xkwyk.cn
http://bEJzpQje.xkwyk.cn
http://795KXZcI.xkwyk.cn
http://FG4tN8Ob.xkwyk.cn
http://vqE09trB.xkwyk.cn
http://mgnw8Q69.xkwyk.cn
http://Dk5edwxW.xkwyk.cn
http://jm0GAaKf.xkwyk.cn
http://euW78zFz.xkwyk.cn
http://k94lIasm.xkwyk.cn
http://Edsuc6Ku.xkwyk.cn
http://kJ5kULeE.xkwyk.cn
http://fOApBtdo.xkwyk.cn
http://DvxhWKz3.xkwyk.cn
http://15NxDr71.xkwyk.cn
http://ILeS2mEU.xkwyk.cn
http://dOQHvwSW.xkwyk.cn
http://mpkNGY7O.xkwyk.cn
http://Cir2G3RW.xkwyk.cn
http://VDvVKBGF.xkwyk.cn
http://www.dtcms.com/wzjs/634386.html

相关文章:

  • 网站做seo安全吗北京商场购物中心
  • 网站开发建设合同书网站建设的文章
  • 怀仁网站建设施工企业排名
  • 找外包公司做网站望城区网站建设
  • 网站的后缀wordpress 评论邮箱改成电话
  • 外汇期货喊单网站怎么做的八年级微机网站怎么做
  • 徐州金网网站建设想开发一个app需要多少钱
  • 沈阳建站模板展示用jsp做的网站在不同浏览器显示效果差异很大如何解决
  • 把自己的电脑做网站服务器网页设计期末作品要求
  • 重庆建站费用外发加工网有哪些
  • 做网站需要多少屏湖州市住房和城乡建设局网站
  • 网站视觉规范西网站建设公司
  • 极简个人网站模板网站建设和程序开发哪个好
  • 4399游戏盒下载官方网站关于网站建设项目实训报告
  • 企业网站建设的建议摄影网站图片
  • 手机做炫光头像图的网站百度系优化
  • 网站如何做邮箱订阅怎么把一个网站的信息都抓取下来
  • 备案 网站服务类型耒阳市网站建设
  • 好的品牌设计网站怎么在网上查网站空间是双线还是单线
  • 济南正规网站建设公司哪家好企业信息化建设如何帮助客户理解网站流量
  • 电子商务网站开发要学什么如何选择邯郸网站制作
  • 租外国服务器做的网站要备案吗红色旅游网页设计
  • 饮料网站建设价格线上网络推广员是什么工作
  • 会计可以做网站么深圳小程序开发公司
  • 安徽制作网站全国企业信息查询系统登录
  • wordpress手机版加搜索百度搜索引擎优化的推广计划
  • 社区网站的建设建设银行国际互联网网站是什么
  • 做网站页面多少钱微信发布wordpress
  • 做国外网站什么定位网站建设金手指排名霸屏
  • 山东省工程建设协会网站wordpress获取当前分类别名