我有两个程序:
#include "file1"
int main(void)
{
return (1);
}
其中file1只是一个与程序位于同一目录中的空文件。
然后我有:
#include "~/file2"
int main(void)
{
return (1);
}
其中file2是一个空文件,但这次是在我的主目录中。
第一个程序编译,第二个程序抱怨并说file not found
有人能解释一下这里发生了什么吗?
答案 0 :(得分:3)
指令如:
#include "file.h"
搜索名称为file.h
的文件。示例中的字符串~/file2
实际上不是文件的名称。 ~
由shell 扩展到主目录的路径;实际的文件名类似于/home/username/file2
。
字符串到文件的映射可能很复杂,并且可能因系统而异,但通常会有大量的语法被shell识别并且转换到文件名,但这本身并不构成文件名。像$HOME
这样的变量名称是相似的;您无法在$HOME
指令中使用#include
。
实际上
#include "~/file2"
可能有效 - 如果您的目录名称字面为~
,其中包含名称为file2
的文件。这将是合法的但令人困惑。
您可以使用
#include "/home/username/file2"
但是这会将源绑定到您的特定主目录,并且会让其他人难以使用ut。
通常,要包含的文件的名称应以.h
结尾,其位置应相对于包含源文件的目录,或者位于编译器搜索的多个位置之一。