Archived

This forum has been archived. Please start a new discussion on GitHub.

ICE preprocessor

"""
The only purpose for which #ifndef, #define, and #endif directives can be used is to create a double-include block.
"""

This seems rather odd... if that is truly the only purpose, can't that be a rule the compiler must implement - no files will be processed more than once?

Is your statement also meant to preclude the inclusion/exclusion of code by setting a macro outside the file like so:

compiler -DDEBUG source_file.ice

source_file.ice

interface myInterface {
void foo();
#ifdef DEBUG
void printInternalState();
#endif
};

Oh, and for goodness sakes, can't we make the semicolon at the end of a type definition optional (or kill it altogether)? Forgetting it will be a very common mistake.
It was easy enough to remember when all you programed in was C++, but now with Java, C#, etc, it becomes half impossible to remember it!

-Yonik

Comments

  • The reason why we limited the use of the C preprocessor is to make it possible to replace it someday with something else, such as "import" statements.

    However, it seems more and more unlikely that we will ever do this. So far the C preprocessor worked rather well, so there is no real reason to remove it. Without the C preprocessor it would also be difficult to automatically generate dependencies of Slice files.
  • My question was more about why can't the slice compiler prevent multiple inclusion on it's own. It's certainly cleaner.

    It looks more like you included #define directives simply to prevent multiple inclusion. And you need to prevent multiple inclusion that way because you are using the C preprocessor in your implementation. That's not a great reason IMHO.
  • Originally posted by yonik
    My question was more about why can't the slice compiler prevent multiple inclusion on it's own. It's certainly cleaner.

    It looks more like you included #define directives simply to prevent multiple inclusion. And you need to prevent multiple inclusion that way because you are using the C preprocessor in your implementation. That's not a great reason IMHO.

    Hmmm... Yes, I get your drift. Basically, we used the preprocessor as a matter of convenience more than anything else. And, given that the preprocessor is used, we of course ended up using the standard mechanism to prevent double inclusion.

    I think it might be possible to modify the Slice parser to automatically skip over files that are included more than once. I'll have a look at this when I get back to Australia in early October.

    Cheers,

    Michi.