VecForeachPtrInRangeIdx
- Macro
- October 8, 2025
Table of Contents
VecForeachPtrInRangeIdx
VecForeachPtrInRangeIdx
Description
Iterate over elements in a specific range of the given vector v
at each index idx
(as pointers). The variables var
and idx
are declared and defined by this macro. idx
will start from start
and will go till end - 1
Parameters
Name | Direction | Description |
---|---|---|
v | in,out | Vector to iterate over. |
var | in | Name of pointer variable to be used which’ll point to value at iterated index idx . |
idx | in | Name of variable to be used for iterating over indices. |
start | in | Starting index (inclusive). |
end | in | Ending index (exclusive). |
Usage example (Cross-references)
// Make idx go out of bounds in VecForeachPtrInRangeIdx by modifying vector during iteration
bool test_vec_foreach_ptr_in_range_idx_out_of_bounds_access(void) {
WriteFmt("Testing VecForeachPtrInRangeIdx where idx goes out of bounds (should crash)\n");
typedef Vec(int) IntVec;
// Use VecForeachPtrInRangeIdx with a fixed range that becomes invalid when we modify the vector
size original_length = vec.length; // Capture this as 9
VecForeachPtrInRangeIdx(&vec, val_ptr, idx, 0, original_length) {
WriteFmt("Accessing idx {} (vec.length={}): {}\n", idx, vec.length, *val_ptr);
- In
Foreach.h:216
:
/// TAGS: Foreach, Vec, Iteration, Loop, Range, Pointer
///
#define VecForeachPtrInRange(v, var, start, end) VecForeachPtrInRangeIdx((v), (var), (____iter___), (start), (end))
#endif // MISRA_STD_CONTAINER_VEC_FOREACH_H
- In
Foreach.h:159
:
///
#define StrForeachPtrInRangeIdx(str, chrptr, idx, start, end) \
VecForeachPtrInRangeIdx((str), (chrptr), idx, (start), (end))
///
- In
VecInt.c:535
:
if (start < end) {
int sum = 0;
VecForeachPtrInRangeIdx(vec, item_ptr, idx, start, end) {
sum += *item_ptr + (int)idx;
}
- In
VecStr.c:565
:
if (start < end) {
size_t total_len = 0;
VecForeachPtrInRangeIdx(vec, str_ptr, idx, start, end) {
total_len += ZstrLen(str_ptr->data) + idx;
}
- In
VecCharPtr.c:603
:
if (start < end) {
size_t total_len = 0;
VecForeachPtrInRangeIdx(vec, str_ptr, idx, start, end) {
total_len += strlen(*str_ptr) + idx;
}