C: 在.h文件里面定义字符串常量

WRONG

const char * MUTEX_NAME = "mutex_shm";
const char * FULL_NAME  = "full_shm";
const char * PATH_NAME = "./text.txt";

ERROR

cc -o edit init.o common.o
common.o:(.data+0x0): multiple definition of `MUTEX_NAME'
init.o:(.data+0x0): first defined here
common.o:(.data+0x8): multiple definition of `FULL_NAME'
init.o:(.data+0x8): first defined here
common.o:(.data+0x10): multiple definition of `PATH_NAME'
init.o:(.data+0x10): first defined here

标准C中const定义的变量是外连接的,即如果一个编译单元中定义了一个全局const常量,则其在其他编译单元中是可见的,如果其他编译单元也定义了同名const常量就会产生重复定义错误。这一点与C++不同,C++中const定义的变量是内连接的,即每个编译单元定义的全局const常量是自己独有的。

RIGHT

static const char * MUTEX_NAME = "mutex_shm";
static const char * FULL_NAME  = "full_shm";
static const char * PATH_NAME = "./text.txt";
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.面向对象的程序设计思想是什么? 答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 2.什么是类?...
    少帅yangjie阅读 5,044评论 0 14
  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 5,031评论 0 13
  • 文/徐小木 2017-04-11 清明节至今一直是雨天不停, 四月份或许本就是多雨季节! 窗外的绿色...
    徐小木阅读 315评论 2 2