我们在使用宏定义一类的技术时,容易发生符号的重定义,特别在这个符号是全局变量时。

可以使用__decspec(selectany)提示编译器,可以重定义此符号。

1.cpp

int sym = 1;

int main()

{

...

}

2.cpp

int sym = 1;

void function()

{...}//only used to prompt the sym is global symbol

编译器会提示,符号重定义。


我们两种解决方案:

1.cpp

int sym = 1;

int main()

{

...

}

2.cpp

extern int sym;

void function()

{...}//only used to prompt the sym is global symbol

第一个方法就是不要重定义咯~


1.cpp

extern __declspec(selectany)  int sym = 1;

int main()

{

...

}

2.cpp

extern __declspec(selectany) int sym = 1;

void function()

{...}//only used to prompt the sym is global symbol

这个时候编译器会任选一个sym的定义作为sym的定义语句。

所以,我们通常这么也这么定义:

extern const __declspec(selectany) int sym = 1;

以上

转载于:https://www.cnblogs.com/wangpei0522/p/4801714.html

__decspec(selectany)相关推荐

  1. __declspec(selectany)的作用

    __declspec是一个Microsoft Visual C++特定的编译器属性开关.括号中指 明的是哪一个属性生效.关于__declspec的其他属性可以百度"__declspec ms ...

  2. Windows C++中__declspec(dllexport)的使用

    __declspec是Microsoft VC中专用的关键字,它配合着一些属性可以对标准C/C++进行扩充.__declspec关键字应该出现在声明的前面. __declspec(dllexport) ...

  3. 从零开始学C++之动态创建对象

    回顾前面的文章,实现了一个简单工厂模式来创建不同类对象,但由于c++没有类似new "Circle"之类的语法,导致CreateShape 函 数中需要不断地ifelse地去判断, ...

  4. c++ 中__declspec 的用法

    语法说明: __declspec ( extended-decl-modifier-seq ) 扩展修饰符: 1:align(#)     用__declspec(align(#))精确控制用户自定数 ...

  5. 不要重复发明轮子:C++重用的5重境界

    软件领域有一个著名的描述软件重用的谚语:不要重复发明轮子! 这个道理是很简单,也很明白的,谁都不想重复无用的劳动,但具体实践中我们该如何避免重复发明轮子呢? 各位注意了,谚语中是说"重复发明 ...

  6. VC实现基于Office 2007 MODI 12.0实现图形文字识别(OCR)的程序

    1.安装Microsoft Office Document Imaging 1)查看是否安装:开始->所有程序->Microsoft Office->工具-> Microsof ...

  7. C++实现类似反射模式(模板)

    C++实现类似反射模式(模板) 编程技巧 2010-11-23 21:08:02 阅读70 评论0   字号:大中小 订阅 最近在编写遥感算法工具箱的时候,工具都是在xml文件中配置好的,在工具箱上构 ...

  8. __declspec关键字详细用法

    __declspec关键字详细用法 2009-01-21 16:23 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与ext ...

  9. __declspec

    __declspec __cdecl和__stdcall都是函数调用规范(还有一个__fastcall),规定了参数出入栈的顺序和方法, 如果只用VC编程的话可以不用关心,但是要在C++和Pascal ...

最新文章

  1. 【 MATLAB 】使用 impz 函数计算并画出脉冲响应
  2. Idea开发Java WEB 应用
  3. JS 做的鼠标放大镜(初级)
  4. [Python人工智能] 二十六.基于BiLSTM-CRF的医学命名实体识别研究(上)数据预处理
  5. Python 多进程pool.map()方法的使用
  6. ERP的配置管理实践
  7. mqtt js 中乱码_ES6中模块导入遇到的问题及其解决办法
  8. 从零开始学习前端JAVASCRIPT — 7、JavaScript基础EVENT
  9. 关于Unity中关节的使用(一)
  10. ARM基础学习-寄存器寻址方式和指令
  11. 2.6.4 调色板技术
  12. 51单片机课设--篮球计分器
  13. 红外真空离心浓缩仪ZLNS-II
  14. 全网首份pyQt6飞机大战
  15. 学习现代化的文章编写方式——关于Markdown语法的使用
  16. Android练手小项目---仿凤凰新闻app
  17. ceph mon 无法启动,报错:ceph-12.2.11/src/mon/AuthMonitor.cc: 157: FAILED assert(ret == 0)
  18. 最迷幻的办法解决SpringBoot访问static文件夹下的静态资源
  19. 川普的退休生活?不,是AI算法的宅舞演绎。
  20. 20145204 张亚军《信息安全系统设计基础》第12周学习总结

热门文章

  1. 【TypeScript】TypeScript 学习 3——类
  2. HashSet 与HashMap底层实现
  3. Base64编码简介及在java中的使用
  4. java 蓝桥杯算法训练 奇变的字符串(题解)
  5. java 蓝桥杯算法训练 快速排序
  6. 深入理解密码学基本概念和应用
  7. 高中计算机课程打字网址,信息课
  8. 智慧社区防控(测温)
  9. java list转数组_java list 转数组
  10. 将GPIO外设挂到Cortex_M3 AHB总线上详细流程扩展外设步骤总结