CLion中#include "string.h"置灰时是否仍会正常引入该头文件
#include "string.h"置灰问题解答 置灰原因
这是CLion内置静态代码检测的未使用头文件提示:如果当前源文件中没有调用你引入的头文件里定义的任何函数、宏、自定义类型,CLion就会把对应的include语句标灰,标记这是当前冗余的引入项。
该提示和重复引入、C/C++头文件自动替换都没有关系。
置灰状态下的引入有效性
只要这行#include "string.h"没有报红色的文件找不到错误,哪怕显示为灰色,预处理和编译阶段都会正常执行头文件引入逻辑,头文件内的所有C标准字符串操作函数(strlen、strcpy、strcmp、memset等)都可以正常调用,功能和非置灰状态的include完全一致。
置灰只是编辑器层面的代码提示,不会修改代码逻辑,也不会对实际编译结果产生任何影响。
C/C++字符串头文件的区别说明
C版本的字符串实现对应的头文件是#include <string>,用于提供std::string类,和你引入的string.h是完全独立的两个头文件,编译器不会自动把C标准库的string.h替换为C的string头文件,你当前的写法可以正常引入C版本的字符串库,符合课程要求。
注意:C标准库头文件的规范写法是使用尖括号包裹,即#include <string.h>;双引号写法会优先检索当前项目目录下的自定义同名头文件,如果你项目中没有自定义的string.h文件,两种写法最终都会引入系统标准库的C版string.h,功能没有区别。
快速验证方式
在源文件中添加一行调用string.h库函数的测试代码即可验证:
int len = strlen("test include");
当CLion检测到你使用了该头文件内的声明,置灰提示会自动消失,也能侧面证明头文件引入逻辑正常。
内容的提问来源于stack exchange,提问作者AdamNaghs

