This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Change in preprocessor behavior


On Monday, December 30, 2002, at 02:38 PM, Stephen Lindholm wrote:
The stringize and token-pasting operators seem to no longer work in the
"cpp" phases of compilation, but they worked in "cpp" in early versions of
gcc (2.95.3). I can't find it written that those operations must occur in
phases 1-4, but # and ## are "preprocessing-op-or-punc" and it would seem
that they should therefore be processed in phase 4.

Am I doing something wrong?


Using this example from the cpp info page:

#define COMMAND(NAME) { #NAME, NAME ## _command }

struct command commands[] =
{
COMMAND (quit),
COMMAND (help),
};

I get this as expected on an old version of cpp (2.95.3):

Xenon > cpp test2
# 1 "test2"


struct command commands[] =
{
{ "quit", quit_command } ,
{ "help", help_command } ,
};

and this on a new version of cpp (3.1):

thrush:~% cpp test2
# 1 "test2"


struct command commands[] =
{
{ #quit, quit ## _command },
{ #help, help ## _command },
};
My experience differs from yours:

bash-2.05a$ cat b.cc
#define COMMAND(NAME) { #NAME, NAME ## _command }

struct command commands[] =
{
COMMAND (quit),
COMMAND (help),
};
bash-2.05a$ gcc -v -E b.cc
Reading specs from /usr/libexec/gcc/darwin/ppc/3.1/specs
Thread model: posix
Apple Computer, Inc. GCC version 1175, based on gcc version 3.1 20020420 (prerelease)
/usr/libexec/gcc/darwin/ppc/3.1/cpp0 -lang-c++ -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -v -D__GNUC__=3 -D__GNUC_MINOR__=1 -D__GNUC_PATCHLEVEL__=0 -D__APPLE_CC__=1175 -D__ppc__ -D__POWERPC__ -D__NATURAL_ALIGNMENT__ -D__MACH__ -D__BIG_ENDIAN__ -D__APPLE__ -D__ppc__ -D__POWERPC__ -D__NATURAL_ALIGNMENT__ -D__MACH__ -D__BIG_ENDIAN__ -D__APPLE__ -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D__DYNAMIC__ b.cc
GNU CPP version 3.1 20020420 (prerelease) (cpplib) (Darwin/PowerPC)
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory "/usr/lib/gcc-lib/ppc-darwin/3.1/../../../../ppc-darwin/include"
ignoring nonexistent directory "/Local/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/gcc/darwin/3.1/g++-v3
/usr/include/gcc/darwin/3.1/g++-v3/ppc-darwin
/usr/include/gcc/darwin/3.1/g++-v3/backward
/usr/include/gcc/darwin/3.1
/usr/include
End of search list.
Framework search starts here:
/System/Library/Frameworks
/Library/Frameworks
End of framework search list.
# 1 "b.cc"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "b.cc"


struct command commands[] =
{
{ "quit", quit_command },
{ "help", help_command },
};

and

bash-2.05a$ cpp -v b.cc
Reading specs from /usr/libexec/gcc/darwin/ppc/3.1/specs
Thread model: posix
Apple Computer, Inc. GCC version 1175, based on gcc version 3.1 20020420 (prerelease)
/usr/libexec/gcc/darwin/ppc/3.1/cpp0 -lang-c++ -D__DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -v -$ -iprefix /usr/libexec/gcc/darwin/ppc/default/../libexec/gcc/darwin/ppc/3.1/ -D__ppc__ -D__POWERPC__ -D__NATURAL_ALIGNMENT__ -D__MACH__ -D__BIG_ENDIAN__ -D__APPLE__ -D__ppc__ -D__POWERPC__ -D__NATURAL_ALIGNMENT__ -D__MACH__ -D__BIG_ENDIAN__ -D__APPLE__ -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D__DYNAMIC__ -D__GNUC__ b.cc
GNU CPP version 3.1 20020420 (prerelease) (cpplib) (Darwin/PowerPC)
ignoring nonexistent directory "/usr/libexec/gcc/darwin/ppc/default/../libexec/gcc/darwin/ppc/3.1/+-v3"
ignoring nonexistent directory "/usr/libexec/gcc/darwin/ppc/default/../libexec/gcc/darwin/ppc/3.1/+- v3/ppc-darwin"
ignoring nonexistent directory "/usr/libexec/gcc/darwin/ppc/default/../libexec/gcc/darwin/ppc/3.1/+- v3/backward"
ignoring nonexistent directory "/usr/libexec/gcc/darwin/ppc/default/../libexec/gcc/darwin/ppc/3.1/+- v3/.."
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory "/usr/lib/gcc-lib/ppc-darwin/3.1/../../../../ppc-darwin/include"
ignoring nonexistent directory "/Local/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/gcc/darwin/3.1/g++-v3
/usr/include/gcc/darwin/3.1/g++-v3/ppc-darwin
/usr/include/gcc/darwin/3.1/g++-v3/backward
/usr/include/gcc/darwin/3.1
/usr/include
End of search list.
Framework search starts here:
/System/Library/Frameworks
/Library/Frameworks
End of framework search list.
# 1 "b.cc"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "b.cc"


struct command commands[] =
{
{ "quit", quit_command },
{ "help", help_command },
};

I cannot explain why. My best guess is that you are not using 1175, or that you didn't use gcc_select to select gcc3. What does gcc_select say when you run it?


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]