Files containing Slice definitions must end in a .ice file extension, for example,
Clock.ice is a valid file name. Other file extensions are rejected by the compilers.
For case-insensitive file systems (such as DOS), the file extension may be written as uppercase or lowercase, so
Clock.ICE is legal. For case-sensitive file systems (such as Unix),
Clock.ICE is illegal. (The extension must be in lowercase.)
Slice is a free-form language so you can use spaces, horizontal and vertical tab stops, form feeds, and newline characters to lay out your code in any way you wish. (White space characters are token separators). Slice does not attach semantics to the layout of a definition. You may wish to follow the style we have used for the Slice examples throughout this book.
Slice files can be ASCII text files or use the UTF‑8 character encoding with a byte order marker (BOM) at the beginning of each file. However, Slice identifiers are limited to ASCII letters and digits; non-ASCII letters can appear only in comments.
Slice is preprocessed by the C++ preprocessor, so you can use the usual preprocessor directives, such as
#include and macro definitions. However, Slice permits
#include directives only at the beginning of a file, before any Slice definitions.
If you use #include directives, it is a good idea to protect them with guards to prevent double inclusion of a file:
#include directives permit a Slice definition to use types defined in a different source file. The Slice compilers parse all of the code in a source file, including the code in
#included files. However, the compilers generate code only for the top-level file(s) nominated on the command line. You must separately compile
#included files to obtain generated code for all the files that make up your Slice definition.
While double quotes will work, the directory in which the preprocessor tries to locate the file can vary depending on the operating system, so the included file may not always be found where you expect it. Instead, use angle brackets (
<>); you can control which directories are searched for the file with the
‑I option of the Slice compiler (see
page 169).