做了一个实验。

最后build失败,失败的原因是变量i被重定义了。原本按照我的思路,是不应该失败的。因为我用了条件编译,若先编译Source.cpp,则会#define __HEADER_H__并且定义变量i,等到之后再编译main.cpp时,由于已经定义__HEADER_H__,就会跳过变量i的定义。最终i只被定义一次,完美。

不管怎么说,编译器是不会出错的,仔细寻找一下原因吧。根据上面的实验结果可以推测出,两个cpp文件中#ifndef 和 #endif之间语句都得到了执行。

将上面的代码稍作改动。

编译没问题,说明i和j确实都没定义过了=>两个cpp中#ifdef和#endif的语句都被执行过了。

网上搜索的一下资料,最终得到如下结论:

每个cpp文件都是单独编译的,之后再对所有cpp文件编译后形成的中间文件进行连接。因此在本例中,两个cpp文件都认为自己没有定义__HEADER_H__,因此都执行了定义工作。

另外一个收获:在函数外部只能对变量和函数进行声明和定义工作,无法进行变量修改以及调用函数等操作。

最新文章

  1. Using assembly writing algorithm programs
  2. android 控件在不同状态下的内容样式与背景样式
  3. Scalaz(27)- Inference & Unapply :类型的推导和匹配
  4. 使用axes函数在matlab绘图中实现图中图的绘制
  5. PS转手绘
  6. Android列表视图(List View)
  7. powershell学习
  8. C语言中如何获得文件大小
  9. mysql下用户和密码生成管理
  10. Unique Paths II 解答
  11. 漫话JavaScript与异步·第二话——Promise:一诺千金
  12. 理解Vue中的Render渲染函数
  13. 2017ecjtu-summer training # 11 POJ 2492
  14. javaFX的控制台实现
  15. C#多条件查出来的多个DataSet,然后循环将数据整合
  16. plsql的database下拉为空,如何解决?
  17. c# WebApi之接口返回类型详解
  18. ASP.NET Web APIs 基于令牌TOKEN验证的实现(保存到DB的Token)
  19. POJ 2656
  20. Python学习--11 面向对象高级编程

热门文章

  1. Java工作流引擎节点接收人设置“按自定义SQL计算”系列讲解
  2. electron-vue 设置cookie
  3. Lua表(table)的个人总结
  4. echarts圆饼图设置默认选中项并在中间显示文字
  5. Java开源工作流引擎Jflow表单方案系列讲解一
  6. Spring Boot2 系列教程 (八) | 配置日志
  7. APICloud打开三方地图整合
  8. html转成pdf 下载,支持后台保存
  9. 设置java启动项目
  10. python3三元运算