This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Problem with string substitution using C51 define directive

I'm trying to pass a string using the C51 DEFINE directive from command line. i.e. DEFINE(SERIAL="FOOBAR")

When compiling, it is converted to an identifier (FOOBAR) instead of remaining as a string literal ("FOOBAR").
Is there a way to force it to remain as a string literal?

Parents
  • How are you passing that command line to C51? Are you sure the tool you're using for that (cmd shell, IDE, Makefile, ...) isn't stripping the quotes, believing they were meant for that tool to deal with, rather than C51? Probably the easiest way of checking this is in the list files: at their top they document the actual command line C51 was invoked with. See if the quotes survived until that point. If it didn't, you need to check your other tools.

    Quotes are notoriously tricky to pass into C compilations from the outside --- every 'make', IDE, and compiler has its own quirk. So odds are you would be better off checking hard if you really need to do this at all. The stringization operator of the preprocessor (#macro) might help you work around that.

Reply
  • How are you passing that command line to C51? Are you sure the tool you're using for that (cmd shell, IDE, Makefile, ...) isn't stripping the quotes, believing they were meant for that tool to deal with, rather than C51? Probably the easiest way of checking this is in the list files: at their top they document the actual command line C51 was invoked with. See if the quotes survived until that point. If it didn't, you need to check your other tools.

    Quotes are notoriously tricky to pass into C compilations from the outside --- every 'make', IDE, and compiler has its own quirk. So odds are you would be better off checking hard if you really need to do this at all. The stringization operator of the preprocessor (#macro) might help you work around that.

Children