preprocessFileLineNumbers: Difference between revisions
Jump to navigation
Jump to search
Lou Montana (talk | contribs) m (Text replacement - "[[Category:Scripting Commands ArmA|" to "[[Category:Scripting Commands Armed Assault|") |
Lou Montana (talk | contribs) m (Text replacement - "[[Image:" to "[[File:") |
||
(51 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{RV|type=command | ||
| | |game1= ofpe | ||
|version1= 1.00 | |||
|1.00 | |game2= arma1 | ||
|version2= 1.00 | |||
| Returns the preprocessed content of the given file. The preprocessor is C-like, it supports comments using /* */ and [[ | |game3= arma2 | ||
|version3= 1.00 | |||
|game4= arma2oa | |||
|version4= 1.50 | |||
|game5= tkoh | |||
|version5= 1.00 | |||
|game6= arma3 | |||
|version6= 0.50 | |||
|gr1= System | |||
|descr= Returns the preprocessed content of the given file. The preprocessor is C-like, it supports comments using /* */ and [[PreProcessor Commands]]. The preprocessor also adds a default debug entrypoint for compiler at the begining of script: {{hl|#line 1 "aFilename"}}<br><br> | |||
The '''#line''' keyword can be used in any script that are not preprocess, or with preprocess script with extra macro to protect reserverd sharp character. The format is:<br> | The '''#line''' keyword can be used in any script that are not preprocess, or with preprocess script with extra macro to protect reserverd sharp character. The format is:<br> | ||
{{hl|'''#line''' <number> "<name>"}}<br> | |||
followed by new line. <number> could be only 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: | followed by new line. <number> could be only 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: | ||
{{hl|File <filename>, line <linenumber>}}<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> | ||
It is possible to use more than one '''#line''' keywords, but it seems having just one at the top for little script is enough to pinpoint position of the error easily. | It is possible to use more than one '''#line''' keywords, but it seems having just one at the top for little script is enough to pinpoint position of the error easily. | ||
{{Feature | Warning | If the file you are loading is not prepared using UTF-8 encoding and contains some characters [[toArray | with codes]] > 127, they might convert incorrectly}} | |||
{{Warning | If the file you are loading is not prepared using UTF-8 encoding and contains some characters [[toArray | with codes]] > 127, they might convert incorrectly}} | |||
|s1= [[preprocessFileLineNumbers]] fileName | |||
| | |p1= fileName: [[String]] - path to the file | ||
| | |r1= [[String]] - file content containing {{hl|#line 1 "aFilename"}} | ||
|x1= <sqf>_string = preprocessFileLineNumbers "A3\ui_f\scripts\IGUI\RscUnitInfo.sqf"</sqf> | |||
|x1= < | |||
Result is: <br> | Result is: <br> | ||
#line 1 "A3\ui_f\scripts\IGUI\RscUnitInfo.sqf"<br> | #line 1 "A3\ui_f\scripts\IGUI\RscUnitInfo.sqf"<br> | ||
disableserialization;<br> | disableserialization;<br> | ||
........ | ........ | ||
| [[preprocessFile]] | |seealso= [[fileExists]] [[preprocessFile]] [[loadFile]] [[Function]] [[SQF Syntax]] [[call]] [[spawn]] [[execVM]] [[PreProcessor Commands]] | ||
}} | |||
{{Note | |||
|user= Killzone_Kid | |||
|timestamp= 20131217134400 | |||
|text= 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.<br> | |||
[[File:PreprocessFile.jpg]] | |||
}} | }} | ||
{{Note | |||
|user= code34 | |||
|timestamp= 20171104101600 | |||
|text= The #line directive get's removed from the output.<br> | |||
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> | 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> | ||
Line 71: | Line 64: | ||
This way you can have custom filenames in error messages. | This way you can have custom filenames in error messages. | ||
}} | |||
Revision as of 23:10, 20 November 2023
Description
- Description:
- Returns the preprocessed content of the given file. The preprocessor is C-like, it supports comments using /* */ and PreProcessor Commands. The preprocessor also adds a default debug entrypoint for compiler at the begining of script: #line 1 "aFilename"
The #line keyword can be used in any script that are not preprocess, or with preprocess script with extra macro to protect reserverd sharp character. The format is:
#line <number> "<name>"
followed by new line. <number> could be only 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 for little script is enough to pinpoint position of the error easily. - Groups:
- System
Syntax
- Syntax:
- preprocessFileLineNumbers fileName
- Parameters:
- fileName: String - path to the file
- Return Value:
- String - file content containing #line 1 "aFilename"
Examples
- Example 1:
- Result is:
#line 1 "A3\ui_f\scripts\IGUI\RscUnitInfo.sqf"
disableserialization;
........
Additional Information
- See also:
- fileExists preprocessFile loadFile Function SQF Syntax call spawn execVM PreProcessor Commands
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
- Posted on Dec 17, 2013 - 13:44 (UTC)
-
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.
- Posted on Nov 04, 2017 - 10:16 (UTC)
-
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.
Categories:
- Scripting Commands
- Introduced with Operation Flashpoint: Elite version 1.00
- Operation Flashpoint: Elite: New Scripting Commands
- Operation Flashpoint: Elite: Scripting Commands
- ArmA: Armed Assault: Scripting Commands
- Arma 2: Scripting Commands
- Arma 2: Operation Arrowhead: Scripting Commands
- Take On Helicopters: Scripting Commands
- Arma 3: Scripting Commands
- Command Group: System