if (! ("0123456789"[dval] < '8')) printf("%s failed!\n","\"0123456789\"[dval] < '8'"); -The important part here is that the "s in the argument end up being \"s -in the string, so that it ends up resulting in a string literal whose -content is the spelling of the argument expression. +The important part here is that each " in the argument end up being a +\" in the string, so that it ends up resulting in a string literal +whose content is the spelling of the argument expression. I had trouble keeping it straight which of # and ## was which until someone pointed out to me that the one with one # is the one that takes # #old #old if (! ("0123456789"[dval] < '8')) printf("%s failed!\n","\"0123456789\"[dval] < '8'"); #old #old The important part here is that the "s in the argument end up being \"s #old in the string, so that it ends up resulting in a string literal whose #old content is the spelling of the argument expression. #old #old I had trouble keeping it straight which of # and ## was which until #old someone pointed out to me that the one with one # is the one that takes # #new #new if (! ("0123456789"[dval] < '8')) printf("%s failed!\n","\"0123456789\"[dval] < '8'"); #new #new The important part here is that each " in the argument end up being a #new \" in the string, so that it ends up resulting in a string literal #new whose content is the spelling of the argument expression. #new #new I had trouble keeping it straight which of # and ## was which until #new someone pointed out to me that the one with one # is the one that takes