#include指令可以在文件的开头以外的地方(比如在循环内)吗?

SSi*_*ht3 2 c c-preprocessor

可能重复:
#include任何地方

对于相应的语言,以下是有效的(可接受的编程实践):

#include "SomeHeader.h"
#include "HeaderDefs.h" //Includes #defines (like CONST_VAR)

void Function1(){;}
void Function2(){;} //etc
//Additionally:
void Function3(){while(1){
  #include "Files.h"
  ;
}} //Result?    

#include "HeaderUndefs.h" //Includes #undef (like undef CONST_VAR)
Run Code Online (Sandbox Code Playgroud)

从以下扩展评论:

我扩大了.请记住它是'有效性'而不是'它会编译'.我相信它可以编译,但Stack Overflow提供了深入探索的见解(如Daniel Wagner).我可以有一个#includes的while循环吗?(或者这会破坏惯例...... #includes任何地方 - 它们也有效吗?).

Dan*_*ner 7

是的,#include指令可以随处可见.甚至内部函数,或循环,或任何东西.填充内容的预处理器对C(或C++)语言一无所知,它完全是愚蠢的.

  • @ SSight3:这是可能的,但通常不是优选的.考虑我的标题A包含标题B,并使用它的一些类.如果我从我自己的那个类中公开这个类,那么强迫每个人重新使用标题B来使用我的类是非常难以管理的,更不用说跟踪哪些标题你可以安全地取消定义的额外工作,*和*编写"undefinitions"的工作",这最终并非总是可行的.也就是说,标题前后都有其用途.例如,在临时禁用编译器警告中. (2认同)