for 循环计数器给出未使用变量警告
for-loop counter gives an unused-variable warning
我的程序有一个带有 for 循环的迭代算法,我将其编写为
for ( auto i: std::views::iota( 0u, max_iter ) ) { ... }
我真的很喜欢它可以这样写,即使必要的头文件是巨大的。当我编译它时,我收到一条警告,指出 i
是一个未使用的变量。
当我用老式的方式写for循环时
for ( unsigned i=0; i < max_iter; i++ ) { ... }
那就没有警告了。
我用一个最小的程序测试了这个 for-loop.cpp
:
#include<ranges>
#include<numeric>
#include<iostream>
int main() {
char str[13] = "this is good";
for (auto i : std::views::iota(0u, 2u)) {
std::cout << str << "\n";
}
for (unsigned it=0; it<2; it++ ) {
std::cout << str << "\n";
}
return 0;
}
果然,用 g++ -Wall --std=c++20 -o for-loop for-loop.cpp
编译它会在第一个循环而不是第二个循环中给出警告。
我是不是漏掉了什么?我更喜欢第一种表示法——而且我知道我可以用 -Wno-unused-variables
停止警告;我想要那些警告,只是我真的在使用 for 循环计数器。
使用 auto i
你永远不会在任何地方使用变量。
在 for ( unsigned i=0; i < max_iter; i++ )
中,您使用了 i
两次,一次在 i < max_iter
中,一次在 i++
中,因此使用了变量
i
确实从未使用过。
您可以添加属性 [[maybe_unused]]
(C++17) 以忽略该警告:
for ([[maybe_unused]]auto i : std::views::iota(0u, 2u)) {
std::cout << str << "\n";
}
我的程序有一个带有 for 循环的迭代算法,我将其编写为
for ( auto i: std::views::iota( 0u, max_iter ) ) { ... }
我真的很喜欢它可以这样写,即使必要的头文件是巨大的。当我编译它时,我收到一条警告,指出 i
是一个未使用的变量。
当我用老式的方式写for循环时
for ( unsigned i=0; i < max_iter; i++ ) { ... }
那就没有警告了。
我用一个最小的程序测试了这个 for-loop.cpp
:
#include<ranges>
#include<numeric>
#include<iostream>
int main() {
char str[13] = "this is good";
for (auto i : std::views::iota(0u, 2u)) {
std::cout << str << "\n";
}
for (unsigned it=0; it<2; it++ ) {
std::cout << str << "\n";
}
return 0;
}
果然,用 g++ -Wall --std=c++20 -o for-loop for-loop.cpp
编译它会在第一个循环而不是第二个循环中给出警告。
我是不是漏掉了什么?我更喜欢第一种表示法——而且我知道我可以用 -Wno-unused-variables
停止警告;我想要那些警告,只是我真的在使用 for 循环计数器。
使用 auto i
你永远不会在任何地方使用变量。
在 for ( unsigned i=0; i < max_iter; i++ )
中,您使用了 i
两次,一次在 i < max_iter
中,一次在 i++
中,因此使用了变量
i
确实从未使用过。
您可以添加属性 [[maybe_unused]]
(C++17) 以忽略该警告:
for ([[maybe_unused]]auto i : std::views::iota(0u, 2u)) {
std::cout << str << "\n";
}