DEBUG C++ ——size_t类型!=int

   如下代码:   

    string sa[6]={"a1","b2","c3","d4","e5","f6"}; 

    vector<string> svec(sa,&sa[6]);//赋值

     cout<<"The value of sa[3]= "<<sa[3]<<endl;//True

     cout<<"The value of svec[3]="<<svec[3]<<endl;//Error!!

    我看了很久没有发现这个错误的根源是什么。难道vector没有索引操作符?

    后面一想,不对啊,vector作为顺序容器,应该具备与string对象的一些基本操作符。

   后面一查,原来在vector里面的索引值必须是size_t类型,修改程序如下,即可运行!

     size_t  index=3;

     cout<<"The value of svec[3]="<<svec[index]<<endl;//True!!

   所以大家在以后的操作中一定要小心小心再小心,不要像我这样。 

### 使用 `__android_log_print` 实现 `LOGD` 宏输出字符串与数字组合 在 Android NDK 开发中,`__android_log_print` 是一个非常有用的工具函数,它允许开发者向系统的日志缓冲区写入带有格式化信息的消息。下面详细介绍如何构建基于此 API 的 `LOGD` 宏来满足需求。 --- #### 构建支持字符串和数字组合的 `LOGD` 宏 为了简化日志记录操作并增强代码可读性,我们可以通过定义宏的方式封装 `__android_log_print` 函数调用过程。这里提供了一种典型的实现方案如下所示: ```c #include <android/log.h> #define LOG_TAG "MY_APP" #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) ``` 在此基础上如果想让我们的程序能够打印像 `"The answer is %d"` 这样既包含固定文本又含有动态计算得出的结果值的信息,则只需要按照标准 C 语言风格书写即可。例如: ```c int result = 42; LOGD("The answer is %d", result); ``` 上述代码片段会将 “The answer is 42” 发送到设备上的调试通道,并标记为来自名为 MY_APP 的组件[^1]。 --- #### 结合实际案例分析 考虑更复杂一点的情形——假设我们需要报告某个数组元素的最大索引位置及其对应数值大小。那么可以这样编写相应部分的源码: ```c void findMax(int array[], size_t length){ int maxVal=-9999,maxIdx=0; for(size_t i=0;i<length;i++){ if(array[i]>maxVal){ maxVal=array[i]; maxIdx=(int)i; } } LOGD("Maximum Value:%d at Index:%d.",maxVal,maxIdx); } ``` 在这里不仅实现了寻找最大值的功能,还借助先前定义好的 `LOGD` 宏把发现的关键数据点同步汇报给了开发人员便于后续验证算法准确性[^2]。 --- #### 关键技术要点解析 - **`__android_log_print`**: 此API接受四个参数依次分别为优先级、标签名称以及格式化的消息串加上其后跟随的具体替换项。 - **预处理器指令(`#define`)的应用** : 我们利用C/C++编译器提供的这一特性创建简洁易懂同时又能灵活适应不同场景需求的新命令形式即所谓的“宏”。 - **可变参数量处理机制(__VA_ARGS__)** :使得最终形成的解决方案具备高度通用性和扩展能力,无论传入多少个额外补充细节均能妥善处置[^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值