What is #line used for?


The #line preprocessor directive is used to reset the values of the __LINE__ and __FILE__ symbols, respectively. This directive is commonly used in fourth-generation languages that generate C language source files. For instance, if you are using a fourth-generation language named "X," the 4GL compiler will generate C source code routines for compilation based on your 4GL source code. If errors are present in your 4GL code, they can be mapped back to your 4GL source code by using the #line directive. The 4GL code generator simply inserts a line like this into the generated C source:

#line 752, "XSOURCE.X"
void generated_code(void)

Now, if an error is detected anywhere in the generated_code() function, it can be mapped back to the original 4GL source file named XSOURCE.X. This way, the 4GL compiler can report the 4GL source code line that has the error in it.

When the #line directive is used, the __LINE__ symbol is reset to the first argument after the #linekeyword  (in the preceding example, 752), and the __FILE__ symbol is reset to the second argument after the #line keyword (in the preceding example, "XSOURCE.X"). All references hereafter to the __LINE__ and __FILE__ symbols will reflect the reset values and not the original values of __LINE__ and __FILE__.


© 2017