关闭

没有躲过的坑--重定义关键字

标签: c++
3114人阅读 评论(1) 收藏 举报
分类:

从学习编程语言开始,我们就知道变量或是函数的命名不能使用系统的关键字。

但是有时候,你不得不这么做。

比如mac、ios、Android、windows共用一个底层代码,这样为了使底层更加通用,有时候就会忽略某种语言的某个关键字。

也许关键字A对于win32就是一个系统关键字,而A不是objective-c的关键字。

这个时候为了保证代码的通用性,就需要重定义关键字,也就是所说的屏蔽掉系统关键字。

比如对于win32平台,需要屏蔽系统的某个关键字,你就可以这样做:

#if PLATFORM == WIN32
#undef ERROR
#endif

enum Type {
   CHAT = 0,
   ERROR,
   UNKNOWN,
  };

而上诉代码的第一行,使用的是预编译头。这样就很好的屏蔽了系统的关键字ERROR,而ERROR成为了你定义的枚举类型。

6
0
查看评论

没有躲过的坑--deprecated关键字

最近两个被一个问题搞的晕晕乎乎,一直把焦点关注在 EXPRESSION SFINAE。因为对我来说,EXPRESSION SFINAE也是完全新鲜的内容,有时间也发个关于这个特性的博客。经历了一番周折,下载最新的VS2015,使用低版本的编译器,都未能解决问题。最后关键字deprecated浮出水面...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-03 21:10
  • 2188

没有躲过的坑--指针(内存泄露)

C++被人骂娘最多的就是指针。 夜深人静的时候,拿出几个使用指针容易出现的坑儿。可能我的语言描述有些让人费劲,尽量用代码说话。通过指向类的NULL指针调用类的成员函数 试图用一个null指针调用类的成员函数,导致崩溃:#include <iostream>using namespac...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-04 23:47
  • 2771

没有躲过的坑--智能指针陷阱

之前博客《浅析C++中的智能指针》讲诉了一些智能指针的东西,可以帮助我们更加方便高效的使用指针,但是凡事都不会很完美。即使你使用智能指针代替了传统的指针,在实战中你还是会遇到很多的坑儿。现在,就分几个方面: 首先为了简化代码,进行了一些定义:class Test { public: Tes...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-15 13:51
  • 2955

没有躲过的坑--正则表达式截取字符串

工程中,需要从字符串中匹配出以:开头,并以:结束的字符串。Google还是百度,很多C++的正则表达式都是通过st::tr1或boost库中使用的,但是我们仅仅用一个小小的功能,就用一个库不是很好的办法。对的,之前我的博客已经介绍了C++11的新特性-正则表达式。所以可以不使用其他的库,来完成任务:...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-23 22:06
  • 18552

抽象类不能进行实例化吗?

抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化。
  • addisonjing
  • addisonjing
  • 2017-07-26 10:55
  • 770

没有躲过的坑--string中的c_str()陷阱

string.c_str是Borland封装的String类中的一个函数,它返回当前字符串的首字符地址。c_str函数的返回值是const char*的,不能直接赋值给char*,所以就需要我们进行相应的操作转化。#include <iostream> #include <st...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-16 22:02
  • 3890

C++项目中的各种坑【2018.1.23】

C++项目中的各种坑 更新时间 2018.1.23 最近做C++项目的时候,踩了许多坑。想着如果能够将它们记录下来,整理在案,也算是不错的总结。于是写下此篇。 2018.1.23 按行读取文本文件时, ‘\r’ 在 Win 与 Lin 处理方式的不同 ‘\r’ 在 Windows 是作为换...
  • u013581035
  • u013581035
  • 2017-10-16 17:21
  • 1045

没有躲过的坑--没有及时break出for循环

break这个词都不陌生,最常用到的就是在switch语句中。如果在switch的case后面忘写了break,就会顺序执行到下一个case的对应的语句。我说的这种情况只是对于C++,对于C Sharp如果忘记了break,编译器是会报错的。仔细想想,好像自己还真没有用过break在其他地方。导致自...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-30 21:19
  • 1989

没有躲过的坑--意想不到的除数为零

工程中有这样一个需求,需要获得一张图片的width和height,然后等比例的显示这张图片。首先是获得得到一张图片的路径,然后计算出他的width和height,然后计算:int resize_width = 160; int resize_height = 160; if (image_width...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-22 22:23
  • 2128

没有躲过的坑--This function or variable may be unsafe.

再说一个坑儿。有时候我们很怀旧,或是喜欢使用一些过时的东西,但是它应该工作的。比如: 判断一个文件是否存在,我们可以使用access。但是access已经是过去时了,用_access代替之。还有很多类似的,这样很不友好。再比如说fopen: 会提示这样的错误:'fopen': T...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-12 22:10
  • 1512
    个人资料
    • 访问:4735741次
    • 积分:42161
    • 等级:
    • 排名:第97名
    • 原创:571篇
    • 转载:29篇
    • 译文:13篇
    • 评论:784条
    微信公众号
      我的微信公众号
      为你推荐最新的博文~更有惊喜等着你
    时光荏苒
      白驹过隙
    博客专栏
    文章分类
    百度统计
    Google Analytics