The macros expand differently depending on the compiler being used. In this case
#if defined(PETSC_HAVE_BUILTIN_EXPECT) #define PetscUnlikely(cond) __builtin_expect(!!(cond), 0) #define PetscLikely(cond) __builtin_expect(!!(cond), 1) #else #define PetscUnlikely(cond) (cond) #define PetscLikely(cond) (cond) #endif So with Microsoft Windows compilers, if they do not support built_inexpect the compiler will only see the #else for the macro thus the compiler would never see the __builtin_expect You can check in $PETSC_DIR/$PETSC_ARCH/include/petscconf.h and see if PETSC_HAVE_BUILTIN_EXPECT is defined. ./configure determines if this (and many other) features are supported by the compiler. It is conceivable that somehow configure determined incorrectly that this is supported. > On Jun 27, 2023, at 10:09 PM, 冯上玮 <fengs...@mail2.sysu.edu.cn> wrote: > > I've followed your advice and include the header's file and libraries in > Visual Studio. Such "error" still shows but I can build the project! It's > strange! > I expand the CHKERRQ macro and find the error actually locates at > > <2f077...@673dae5f.6c969b6400000000.bmp> > > What I know from google is that the "__builtin_expect__" is defined in GCC, > so is it unsolvable in Windows with visual studio C compiler or Inter C > compiler? > ------------------ Original ------------------ > From: "Matthew Knepley"<knep...@gmail.com>; > Date: Wed, Jun 28, 2023 01:59 AM > To: "冯上玮"<fengs...@mail2.sysu.edu.cn>; > Cc: "petsc-users"<petsc-users@mcs.anl.gov>; > Subject: Re: [petsc-users] Problem in some macro when using VS+intel cl > > On Tue, Jun 27, 2023 at 11:32 AM 冯上玮 <fengs...@mail2.sysu.edu.cn > <mailto:fengs...@mail2.sysu.edu.cn>> wrote: >> Hi, >> >> After failure with MS-MPI once and once again, I tried icl+oneAPI and >> succeeded in installing and testing PESTc in Cygwin! >> >> However, (always however) when I copied the example code on Getting Started >> page on visual studio, there are tons of error like: >> <ccb1c...@3fc4424f.6c969b6400000000.jpg> >> I just wonder where the problem locates, I've googled this error message and >> it seems that it's induced by the difference of compilers, c.f. >> https://stackoverflow.com/questions/42136395/identifier-builtin-expect-is-undefined-during-ros-on-win-tutorial-talker-ex. >> But Intel says that they also provide such thing on icl, and I actually use >> this compiler instead of visual studio cl... > > The IDE is not showing the actual error message. Are you sure that your IDE > build has the right includes and libraries? You can > get these using > > cd $PETSC_DIR > make getincludedirs > make getlinklibs > > Thanks, > > Matt > >> Anyway, the project could be built if I delete these error-checking macro. >> >> Installing feedback (or as a test result): >> When configure on windows, only icl + impi works, and in this case, both >> --with-cc and --with-cxx options need to point out the version like: >> --with-cc-std-c99 and --with-cxx-std-c++'ver'. Other combinations such as cl >> + impi, icl + msmpi, cl + msmpi never work. My tutor told me that older >> version of msmpi may work but I never try this. >> >> FENG. > > > -- > What most experimenters take for granted before they begin their experiments > is infinitely more interesting than any results to which their experiments > lead. > -- Norbert Wiener > > https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>