define kinda stuff

Gregory Smith greg at utcsri.UUCP
Sat Apr 19 04:49:03 AEST 1986


In article <2604 at brl-smoke.ARPA> see at NTA-VAX.ARPA (Stein-Erik Engbr}ten) writes:
>The problem is to define '(-:' as '/*' (start of comment), and :-) '*/'.
>
>> Obviously the right way to do this is the following:
>> 
>> 	#define  cat(a,b)  a/**/b
>> 	#define  (-:       cat(/,*)
>> 	#define  :-)       cat(*,/)
>
>The preprocessor doesn't allow '(-:' as a definition-name 
>(Berkeley 4.2/4.3).
>	
>However, the program below doesn't do what it is supposed to either. 
>When the preprocessor has finished, you just get 'main() {'.
>	
>-->#define cat(a,b)		a/**/b
>-->#define start_comm		cat(/,*)
>-->#define end_comm		cat(*,/)
>-->
>-->main()
>-->{
>-->	start_comm   This is a comment   end_comm
>-->	cat(pri,ntf)("This is a nice one...\n");
>-->	printf("Hello...\n");
>-->}
True.
>
>When in a comment, no expansion is done! 
>
>How do we then define something which is to end a comment? I would say
>it is impossible, but is eager to hear of anybody who thinks otherwise.
>
>Stein-Erik Engbr}ten

The following method is stolen from one of the winners of last years'
obfuscated-C-code contest ( Col. G. L. Sicherman <decvax!sunybcs!colonel>):

------------------- funny.c ----------------
#define b *
#define start_comm		/b
#define end_comm		b/

main()
{
	start_comm   This is a comment   end_comm
	printf("Hello...\n");
}

-------- cc -E funny.c: --------------------

# 1 "funny.c"




main()
{
		/*   This is a comment   	*/
	printf("Hello...\n");
}

I guess it works because the pre-processor doesn't *know* it is
in a comment. The '/*' doesn't appear until *after* the 'b' is expanded,
and by then the pre-processor is past the '/', so the comment is not
recognized. The following also works (and was used in Col Sicherman's
winning entry):

#define toggle_comment /b/

Of course, this method causes the pre-processor to pass your comments
to the compiler proper.

( By the way, Col Sicherman won the 'worst abuse of the preprocessor'
category ).
-- 
"If you aren't making any mistakes, you aren't doing anything".
----------------------------------------------------------------------
Greg Smith     University of Toronto      UUCP: ..utzoo!utcsri!greg



More information about the Comp.lang.c mailing list