#include任何地方

Jas*_*enX 12 c++ include c-preprocessor

#include <file>仅用于标题还是仅仅是机械"在此处注入此代码",可以在代码中的任何位置使用?

如果我在cpp函数中使用它来从单个源"注入"代码怎么办?这会有用吗还是编译器会为此尖叫?

Ale*_*ler 19

一个机械注入代码的设备.如果您愿意,可以包含一个包含Goethe's Faust的文本文件.你可以把它放在任何地方,即使是在一个功能的中间(当然,#include需要一个新的线!).

但是,仅使用#include头文件是强烈的惯例.我可能有理由不反对它,例如拉入机器生成的代码或将所有翻译单元合并到一个文件中.

  • 您可以免费下载Goethe's Faust [here](http://www.gutenberg.org/ebooks/3023);) (10认同)

Mar*_*som 10

它不仅适用于任何地方,而且可以带来一些有趣的技术.这是一个生成枚举和保证同步的相应字符串表的示例.

Animals.h:

ANIMAL(Anteater)
ANIMAL(Baboon)
...
ANIMAL(Zebra)
Run Code Online (Sandbox Code Playgroud)

AnimalLibrary.h:

#define ANIMAL(name) name,

enum Animals {
#include "Animals.h"
        AnimalCount
    };

#undef ANIMAL

extern char * AnimalTable[AnimalCount];
Run Code Online (Sandbox Code Playgroud)

AnimalLibrary.cpp:

#include "AnimalLibrary.h"

#define ANIMAL(name) #name,

char * AnimalTable[AnimalCount] = {
#include "Animals.h"
    };
Run Code Online (Sandbox Code Playgroud)

main.cpp中:

#include "AnimalLibrary.h"

int main()
{
    cout << AnimalTable[Baboon];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

一定不要将通常的包含警卫放在任何将被包含多次的文件中!

必须同意William Pursell,尽管这种技术会让人摸不着头脑.


flo*_*olo 7

它将起作用 - 或多或少它的语义含义是:在此文件中放置代码

编辑:对于滥用#include的用法我可以推荐以下内容:

#include "/dev/console"
Run Code Online (Sandbox Code Playgroud)

这允许一切:一行可以做任何事情,一个错误,它只是一个编译问题...


Wil*_*ell 5

编译器不会抱怨,但每个必须维护代码的人都会.