Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于C++中的包含机制_C++ - Fatal编程技术网

关于C++中的包含机制

关于C++中的包含机制,c++,C++,最近我遇到了一些奇怪的代码,这肯定是一个不好的做法,但有点有趣 例如,我有三个文件: 什么的 class Something { void func(); } 某物 void Something::func() { #define STRANGE() //do something #include strange.h return; } 奇怪 STRANGE() 那个怪人叫怪人,他居然跑了 这让我对include机制感到好奇,

最近我遇到了一些奇怪的代码,这肯定是一个不好的做法,但有点有趣

例如,我有三个文件: 什么的

class Something  
{  
    void func();  
}
某物

void Something::func()  
{  
    #define STRANGE() //do something  
    #include strange.h  
    return;  
}
奇怪

STRANGE()
那个怪人叫怪人,他居然跑了

这让我对include机制感到好奇,include派生是否只是在编译之前将include文件中的所有内容都放在include中

如果是这样,我甚至可以切换.CPP和.h的角色,在CPH文件中声明,同时在H文件中执行.< /P> < P>每C++标准:

表单的预处理指令

# include " q-char-sequence " new-line
使该指令替换为指定指令标识的源文件的全部内容 分隔符之间的顺序。在定义的实现中搜索命名的源文件 方式如果不支持此搜索,或者搜索失败,则将重新处理该指令,就像它读取一样

# include < h-char-sequence > new-line
具有与原始指令相同的包含序列,包括>个字符(如果有)

那么你的问题的答案是:

这让我对include机制感到好奇,include派生是否只是在编译之前将include文件中的所有内容都放在include中

答案是肯定的

关于文件的命名,正如有人在评论中指出的,扩展名只是文件名的一部分。它们在C++编译器对文件的解释中没有发挥任何作用。因此,你可以给他们起任何你想要的名字。你甚至可以不包括一个扩展,如STL所做的那样。

< P>每C++标准:

表单的预处理指令

# include " q-char-sequence " new-line
使该指令替换为指定指令标识的源文件的全部内容 分隔符之间的顺序。在定义的实现中搜索命名的源文件 方式如果不支持此搜索,或者搜索失败,则将重新处理该指令,就像它读取一样

# include < h-char-sequence > new-line
具有与原始指令相同的包含序列,包括>个字符(如果有)

那么你的问题的答案是:

这让我对include机制感到好奇,include派生是否只是在编译之前将include文件中的所有内容都放在include中

答案是肯定的


关于文件的命名,正如有人在评论中指出的,扩展名只是文件名的一部分。它们在C++编译器对文件的解释中没有发挥任何作用。因此,你可以给他们起任何你想要的名字。您甚至不能像STL那样包含扩展名。

是的,include指令只是复制包含的文件并替换该指令

是的,您可以包括.cpp文件、.c文件和没有扩展名的文件,就像现在标准库中的大多数头一样


扩展名仅适用于程序员,也可能适用于IDE,IDE可能根据扩展名生成makefile或编译器命令行参数

是的,include指令只是复制包含的文件并替换该指令

是的,您可以包括.cpp文件、.c文件和没有扩展名的文件,就像现在标准库中的大多数头一样


扩展只针对程序员,也可能针对IDE,IDE可能会根据扩展生成makefile或编译器命令行参数

您所说的运行是什么意思?您介意包含main.cpp中的代码吗?这让我对include机制感到好奇,include派生是否只是在编译之前将包含文件中的所有内容都放在include中?。是的。扩展名*.cpp和*.h只是惯例。如果需要,也可以将它们全部设置为*.txt文件。对于初学者来说,include square.h无效。你要么需要。。。或者,这能回答你的问题吗?你说它跑是什么意思?您介意包含main.cpp中的代码吗?这让我对include机制感到好奇,include派生是否只是在编译之前将包含文件中的所有内容都放在include中?。是的。扩展名*.cpp和*.h只是惯例。如果需要,也可以将它们全部设置为*.txt文件。对于初学者来说,include square.h无效。你要么需要。。。或者,这能回答你的问题吗?关于实现定义方式的注意事项:如果我将相对路径放在预处理本身的标题中的include中,我总是问自己当前目录是该标题的文件夹还是开始预处理的翻译单元的文件夹。根据我的印象,,MSVC和g++执行前者,但如果能更精确地定义,我将不胜感激……关于实现定义方式的注意事项:如果我将相对路径放置在标题中,该标题本身就是预处理的主题,我总是问自己当前目录是该标题的文件夹还是翻译单元的文件夹,其中已为启动预处理。从…起 我的印象是,MSVC和g++是前者,但如果能更精确地定义它,我将不胜感激。。。