- ts101 #工作记录 #c/c++ #学习
- 多文件编译
- 调试头文件定义
- ifdef PRINT
- include
- define INFO(FMT,…) printf(“[INFO]”FMT, ##VA_ARGS)
- define WARN(FMT,…) printf(“[WARN]”FMT, ##VA_ARGS)
- define ERROR(FMT,…) printf(“[ERROR]|%s:%d|”FMT,FILE,LINE,##VA_ARGS )
- else
- define INFO(FMT,…)
- define WARN(FMT,…)
- define ERROR(FMT,…)
- endif
- if (defined PRINT) && (defined DEBUG)
- define DEBUG(FMT,…) printf(“[DEBUG]”FMT, ##VA_ARGS)
- define DEBUGI(FMT,…) printf(“[DEBUG]|%s:%d|”FMT,FILE,LINE,##VA_ARGS )
- else
- define DEBUG(FMT,…)
- define DEBUGI(FMT,…)
- endif
- [问题]修复一个 Warning
- [问题]出现编译的文件不存在
- 项目属性研究
ts101 #工作记录 #c/c++ #学习
在开发过程中为了增加程序的可移植性, 代码的复用是关键, 为了后面算法在 QT 上的无缝使用, 我们对多文件编译, 同时建立我们的调试头文件将一些调试信息用宏管理.
多文件编译
- 我们增加一个自定义的 math.c 文件里面增加一个 add 函数, 并定义开放的.
- 具体函数查看 git 项目
- 在编译时会报
'add [_add]' referenced from '.\Debug\helloworld.doj'的错误, 这是因为 math.c 没有加入项目 - 项目右键 Add File(s) to Project 将头文件和源文件加入项目, 并保存项目
. -
调试头文件定义
为了快速对 printf 进行控制处理, 我们需要对调试函数做新的宏定义.
我们先需要了解一些 ANSI C标准宏
__LINE__; // 在源码中插入当前源代码行号__FILE__; // 在源码中插入当前文件名__DATE__; // 在源码中插入编译日期__TIME__; // 在源码中插入编译时间__VA_ARGS__;
编写头文件定义 ```c
ifdef PRINT
include
define INFO(FMT,…) printf(“[INFO]”FMT, ##VA_ARGS)
define WARN(FMT,…) printf(“[WARN]”FMT, ##VA_ARGS)
define ERROR(FMT,…) printf(“[ERROR]|%s:%d|”FMT,FILE,LINE,##VA_ARGS )
else
define INFO(FMT,…)
define WARN(FMT,…)
define ERROR(FMT,…)
endif
if (defined PRINT) && (defined DEBUG)
define DEBUG(FMT,…) printf(“[DEBUG]”FMT, ##VA_ARGS)
define DEBUGI(FMT,…) printf(“[DEBUG]|%s:%d|”FMT,FILE,LINE,##VA_ARGS )
else
define DEBUG(FMT,…)
define DEBUGI(FMT,…)
endif
- 修改所有的 printf 为 DEBUG, 同时建立如下测试函数```cvoid testDebugFunc(void) {DEBUG("TestSize: %d\n", sizeof(a));DEBUGI("TestSize: %d\n", sizeof(a));INFO("TestSize: %d\n", sizeof(a));WARN("TestSize: %d\n", sizeof(a));ERROR("TestSize: %d\n", sizeof(a));}
- 现在运行程序可以看到我们啥也看不见. 因为我们没有定义
__PRINT__和__DEBUG__宏 - Project -> Project Options 找到 Perprocessor 页面, 在第一行中加入
__PRINT__

- 可以看到只有 INFO WRN 和 ERROR 输出了

- 再加入
__DEBUG__注意要和之前的变量有一个空格. 可以看到 DEBUG 信息已经正常输出
[问题]修复一个 Warning
warning 信息如下:
cc1080 warning: Function does not have a full prototype
我已经在文件开头对函数做了声明, 但是还有这个问题. 将被调用的函数放在文件前面, 即可解决此文件. 【详情看 helloworld.c 文件】
[问题]出现编译的文件不存在
由于我们将一个头文件从 helloworld.c 中移除, 这时编译会出现找不到头文件问题.
解决思路有两种
