Q:  The following code snippet is excerpted from a Bourne shell script which attempts to determine how to invoke the C preprocessor on any given UNIX platform.  The script creates a file called testcpp.c and runs the C preprocessor on that file redirecting the output to testcpp.out.  When I run this script under NEXTSTEP it incorrectly inserts a space in the output file "abc +xyz".  This causes the test which confirms "cc -E" as the correct invocation to fail.  Is this a bug in your C preprocessor?

	: see how we invoke the C preprocessor
	echo " "
	echo "Checking to see how your C preprocessor is invoked..."
	cat <<'EOT' >testcpp.c
	#define ABC abc
	#define XYZ xyz
	ABC+XYZ
	EOT
	echo 'Maybe "cc -E" will work...'
	cc -E testcpp.c >testcpp.out 2>&1
	if $contains 'abc+xyz' testcpp.out >/dev/null 2>&1 ; then
	    echo "Yup, it does."
	    cpp='cc -E'
	else
	    echo 'Nope...maybe "cc -P" will work...'
	    cc -P testcpp.c >testcpp.out 2>&1
	    if $contains 'abc+xyz' testcpp.out >/dev/null 2>&1 ; then
		echo "Yup, that does."

A:  The space inserted before the "+xyz" follows the behavior specified by ANSI C.  If you want the old behavior of standard UNIX compilers, use the -traditional flag.  The man page on cc(1) shows a large number of useful compiler flags in addition to -traditional.  The flags -bsd and -fwritable-strings may also be needed when compiling old UNIX programs.

QA594				

Valid for 2.0, 3.0