▲ | kazinator 4 days ago | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
> What is the bounds of our program? N3220: 5.1.1.1 Program Structure A C program is not required to be translated in its entirety at the same time. The text of the program is kept in units called source files, (or preprocessing files) in this document. A source file together with all the headers and source files included via the preprocessing directive #include is known as a preprocessing translation unit. After preprocessing, a preprocessing translation unit is called a translation unit. Previously translated translation units may be preserved individually or in libraries. The separate translation units of a program communicate by (for example) calls to functions whose identifiers have external linkage, manipulation of objects whose identifiers have external linkage, or manipulation of data files. Translation units may be separately translated and then later linked to produce an executable program. > Couldn't it be the set {main.c, winkle.h} No; in this discussion it is important that <winkle.h> is understood not to be part of the program; no such header is among the files presented for translation, linking and execution. Thus, if the implementation doesn't resolve #include <winkle.h> we get the uninteresting situation that a constraint is violated. Let's focus on the situation where it so happens that #include <winkle.h> does resolve to something in the implementation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
▲ | quietbritishjim 4 days ago | parent [-] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
The bit of the standard that you've quoted says that the program consists of all files that are compiled into it, including all files that are found by the #include directive. So, if <winkle.h> does successfully resolve to something, then it must be part of the program by definition because that's what "the program" means. Your question about an include file that isn't part of the program just doesn't make any sense. (Technically it says that those files together make up the "program text". As my other comment says, "program" is the binary output.) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|