在循环中使用 has_include 和变量来检查库
Using has_include with variables in a loop to check libraries
我正在尝试使用此 中的 __has_include 检查库是否可用。因为我想检查每个我正在使用循环
/* Array of Strings */
const char* libraries[5] = { "iostream", "unistd.h", "stdlib.h", "Windows.h", "winaaasock2.h"};
/* Getting the length of the array */
int librariesSize = sizeof(libraries)/sizeof(libraries[0]);
/* Looping through them (5 Times) */
for (int i = 0; i < librariesSize; i++) {
#if __has_include(<\"libraries[i]"\>)
#include <\"libraries[i]"\>
cout << "Ok";
#else
cout << "Error";
#endif
}
它编译了,但它仍然告诉我所有这些都存在,即使对于 winaaasock2,它是由原始的 winasock2 组成的。
它需要在 <> 符号和引号内,所以我使用了反斜杠
使用没有循环的相同代码有效
#if __has_include("winaaasock2.h")
#include "winaaasock2.h"
cout << "Ok";
#else
cout << "Error";
#endif
这里的输出是错误的,像unistd.h这样的库输出是可以的,因为它存在
我错过了什么?提前致谢
It compiles
不应该。 C++ 语言不允许在命名空间范围内使用表达式语句,例如循环。示例程序是ill-formed.
除此之外,pre-processor 不知道您的循环。您的程序有两种可能的处理方式:
// if the header \"libraries[i]"\ exists
for (int i = 0; i < librariesSize; i++) {
// content from header \"libraries[i]"\
cout << "Ok";
}
// OR if the header \"libraries[i]"\ doesn't exist
for (int i = 0; i < librariesSize; i++) {
cout << "Error";
}
如果您只想检查是否所有 header 都存在,否则会产生错误,那么 __has_include
将不会为您提供任何有用的信息。你应该简单地包括它们。如果 header 缺失,将出现解释该问题的错误消息。
我正在尝试使用此
/* Array of Strings */
const char* libraries[5] = { "iostream", "unistd.h", "stdlib.h", "Windows.h", "winaaasock2.h"};
/* Getting the length of the array */
int librariesSize = sizeof(libraries)/sizeof(libraries[0]);
/* Looping through them (5 Times) */
for (int i = 0; i < librariesSize; i++) {
#if __has_include(<\"libraries[i]"\>)
#include <\"libraries[i]"\>
cout << "Ok";
#else
cout << "Error";
#endif
}
它编译了,但它仍然告诉我所有这些都存在,即使对于 winaaasock2,它是由原始的 winasock2 组成的。
它需要在 <> 符号和引号内,所以我使用了反斜杠
使用没有循环的相同代码有效
#if __has_include("winaaasock2.h")
#include "winaaasock2.h"
cout << "Ok";
#else
cout << "Error";
#endif
这里的输出是错误的,像unistd.h这样的库输出是可以的,因为它存在
我错过了什么?提前致谢
It compiles
不应该。 C++ 语言不允许在命名空间范围内使用表达式语句,例如循环。示例程序是ill-formed.
除此之外,pre-processor 不知道您的循环。您的程序有两种可能的处理方式:
// if the header \"libraries[i]"\ exists
for (int i = 0; i < librariesSize; i++) {
// content from header \"libraries[i]"\
cout << "Ok";
}
// OR if the header \"libraries[i]"\ doesn't exist
for (int i = 0; i < librariesSize; i++) {
cout << "Error";
}
如果您只想检查是否所有 header 都存在,否则会产生错误,那么 __has_include
将不会为您提供任何有用的信息。你应该简单地包括它们。如果 header 缺失,将出现解释该问题的错误消息。