[英]How to include a file in C and/or C++
我有一个头文件,我试图包含使用include
预处理器目录的另一个源文件。 我试图同时使用引用形式和角度形式,但似乎都没有做到这一点。
文件名是.>"hello.h
和编译器搜索它的目录。我试图像这样包含它:
#include <.>"hello.h>
#include <.\\>"hello.h>
#include <.\\>\\"hello.h>
#include ".>"hello.h"
#include ".>\\"hello.h"
我还尝试了不同的C和C ++编译器 - clang,gcc,clang ++和g ++。
显然,上述任何一项都不起作用,否则毫无疑问。
我认为根据标准,这个名字可能不合法。 不幸的是,我手边没有C和C ++标准规范。 我能找到信息的唯一权威来源是该MSDN有关页面#include
指令,以及GNU C预处理程序文件, 在这里 。 GNU的文档并没有多说,MSDN有以下条款,但是:
path-spec是一个文件名,可选地在目录规范之后。 文件名必须命名现有文件。 path-spec的语法取决于编译程序的操作系统。
我很好奇C和C ++标准对此有何看法?
在哪里可以找到针对C和C ++头文件命名要求的特定于操作系统的规则? 我对OS X,Linux和FreeBSD特别感兴趣。
为什么转义<
和/或"
字符不起作用?
我如何包含我的文件?
我认为你对draft C99 standard
第6.4.7 Header names
节中的文件名6.4.7 Header names
的语法如下:
header-name:
< h-char-sequence >
" q-char-sequence "
h-char-sequence:
h-char
h-char-sequence h-char
h-char:
any member of the source character set except
the new-line character and >
q-char-sequence:
q-char
q-char-sequence q-char
q-char:
any member of the source character set except
the new-line character and "
你同时拥有"
和>
中不包括你无论从文件名q-char
和h-char
规范。我不认为你有很多选择,但要更改文件名。
draft C++ standard
第2.9 Header names
节2.9 Header names
的语法相同。
在C和C ++中,这不是有效的头名,因为它包含>
和"
。
标题名称的语法允许由<>
分隔的那些包含“除新行和>
之外的源字符集的任何成员”,以及由""
分隔的那些包含“除了换行符之外的源字符集的任何成员” "
”。没有逃脱序列的概念。
“和>不是Windows中文件名的有效字符。您的文件名应该是hello.h,或。\\ hello.h,或.. \\ hello.h,但不是。>”hello.h。
#include "hello.h"
#include ".\hello.h"
#include "..\hello.h"
#include "c:/temp/hello.h"
这就是为什么你不会在MSDN中找到任何关于它的东西。
ext3允许大多数字符(使用时必须转义几个字符),但强烈建议您在命名标题和源文件时不要使用它们(如果没有其他原因而不是可读性)。 有关更多信息,请访问: http : //pic.dhe.ibm.com/infocenter/compbg/v121v141/index.jsp?topic =%2Fcom.ibm.xlcpp121.bg.doc%2Flanguage_ref%2Fc99preprocessor.html
什么是可接受的文件名是实现定义的。 我希望#include ".>\\"hello.h" to work, at least on systems where
'>' and
'”'在文件名中是合法的系统上工作,但是没有要求它工作,并且有明确的系统它不会,因为这些名称在系统中是不合法的。
您可以尝试强制解决此问题:
#define NAME ".>\"hello.h"
#include NAME
但是,出于实用的目的,你应该限制你的文件名以字母数字,下划线和连字符也许 (但我会猜疑这些的为好)。 并且在扩展之前只有一个点。 如果你去寻找麻烦,如果你发现它,不要感到惊讶。
当然,这回答了您的上一个问题:如何包含该文件。 你将它重命名为合理的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.