> I suppose we should then use: > > #ifdef _POSIX_TIMERS > # if _POSIX_TIMERS > 0
Doesn't help. It's defined, but null. Mr, Jones is probably close to the right answer with: > #if _POSIX_TIMERS - 0 > 0 I was looking for a way to make null look like positive, but a little more reading ("http://www.opengroup.org/onlinepubs/009695399/basedefs/unistd.h.html") suggests that zero is about as reasonable as anything: If a symbolic constant is defined with the value -1, the option is not supported. Headers, data types, and function interfaces required only for the option need not be supplied. An application that attempts to use anything associated only with the option is considered to be requiring an extension. If a symbolic constant is defined with a value greater than zero, the option shall always be supported when the application is executed. All headers, data types, and functions shall be present and shall operate as specified. If a symbolic constant is defined with the value zero, all headers, data types, and functions shall be present. The application can check at runtime to see whether the option is supported by calling fpathconf(), pathconf(), or sysconf() with the indicated name parameter. Pending a good counter argument, the best way out may be: # if defined(_POSIX_TIMERS) && (_POSIX_TIMERS - 0 >= 0) Perhaps with a comment describing the (unknown) danger. (Then wait for the next complaint.) Everything's complicated. SMS.