preprocessFileLineNumbers: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
(Undo part of the last change and fix grammar and add more Info to note) |
||
Line 7: | Line 7: | ||
____________________________________________________________________________________________ | ____________________________________________________________________________________________ | ||
| Returns the preprocessed content of the given file. The preprocessor is C-like, it supports comments using // or /* and */ and | | Returns the preprocessed content of the given file. The preprocessor is C-like, it supports comments using // or /* and */ and macros defined with #define. The return is file content starting with <tt>#line 1 "aFilename"</tt><br><br> | ||
<u>This is how mysterious '''#line''' keyword works:</u><br><br> | |||
The keyword can be used in any script, even the one made on-the-fly and executed in debug console for example. The format is:<br> | |||
<tt>'''#line''' <number> "<name>"</tt><br> | <tt>'''#line''' <number> "<name>"</tt><br> | ||
followed by new line. <number> could be | followed by new line. <number> could be any positive integer and <name> could be any name. This will be used only if an error occurs in the script. The error will contain the line: | ||
<tt>File <filename>, line <linenumber></tt><br> | <tt>File <filename>, line <linenumber></tt><br> | ||
where <filename> will be the <name> you set and <linenumber> will be <number> + how many lines it is from the '''#line''' line. If the error happened on the line right under '''#line''' it will add 0 to <number>, if on second line, it will add 1 etc.<br><br> | where <filename> will be the <name> you set and <linenumber> will be <number> + how many lines it is from the '''#line''' line. If the error happened on the line right under '''#line''' it will add 0 to <number>, if on second line, it will add 1 etc.<br><br> | ||
Line 61: | Line 62: | ||
<dt class="note">[[User:code34|code34]]</dt> | <dt class="note">[[User:code34|code34]]</dt> | ||
<dd class="note"> | <dd class="note"> | ||
The #line directive get's removed from the output.<br> | |||
So to add a custom #line directive before while using preprocessFileLineNumbers, you have to use a preprocessor macro like this:<br> | |||
''#define'' DEBUG(sharp,name) sharp##line 0 name<br> | ''#define'' DEBUG(sharp,name) sharp##line 0 name<br> | ||
and add this at the right place in your code<br> | and add this at the right place in your code<br> | ||
DEBUG(#," | DEBUG(#,"your filename"); | ||
This way you can have custom filenames in error messages. | |||
</dd> | </dd> | ||
</dl> | </dl> | ||
<!-- DISCONTINUE Notes --> | <!-- DISCONTINUE Notes --> |
Revision as of 23:22, 4 November 2017
Description
- Description:
- Returns the preprocessed content of the given file. The preprocessor is C-like, it supports comments using // or /* and */ and macros defined with #define. The return is file content starting with #line 1 "aFilename"
This is how mysterious #line keyword works:
The keyword can be used in any script, even the one made on-the-fly and executed in debug console for example. The format is:
#line <number> "<name>"
followed by new line. <number> could be any positive integer and <name> could be any name. This will be used only if an error occurs in the script. The error will contain the line: File <filename>, line <linenumber>
where <filename> will be the <name> you set and <linenumber> will be <number> + how many lines it is from the #line line. If the error happened on the line right under #line it will add 0 to <number>, if on second line, it will add 1 etc.
It is possible to use more than one #line keywords, but it seems having just one at the top of the script is enough to pinpoint position of the error easily. - Groups:
- Uncategorised
Syntax
- Syntax:
- preprocessFileLineNumbers fileName
- Parameters:
- fileName: String - path to the file
- Return Value:
- String - file content containing #line 1 "aFilename"
Examples
- Example 1:
_string = preprocessFileLineNumbers "A3\ui_f\scripts\IGUI\RscUnitInfo.sqf"
Result is:
#line 1 "A3\ui_f\scripts\IGUI\RscUnitInfo.sqf"
disableserialization;
........
Additional Information
Notes
-
Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
Notes
- Posted on December 17, 2013
- Killzone_Kid
- The main difference between preprocessFile and preprocessFileLineNumbers is that the latter adds #line keyword to the target file, which allows to log the __LINE__ error happened at and the __FILE__ error happened in.
Bottom Section
- Posted on November 4, 2017 - 10:16 (UTC)
- code34
-
The #line directive get's removed from the output.
So to add a custom #line directive before while using preprocessFileLineNumbers, you have to use a preprocessor macro like this:
#define DEBUG(sharp,name) sharp##line 0 name
and add this at the right place in your code
DEBUG(#,"your filename"); This way you can have custom filenames in error messages.