[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: lua.h and c++
- From: Benno <benjl@...>
- Date: Thu, 30 Sep 2004 01:09:43 +1000
On Wed Sep 29, 2004 at 14:40:02 +0100, David Jones wrote:
>
>On Sep 29, 2004, at 12:41, Daniel Walker wrote:
>
>>Unfortunately I can't really accept that solution as the
>>necessity for it is the exact problem I wished to address.
>>Furthermore, you may notice that
>>
>> #ifndef LUA_API
>> #ifdef __cplusplus
>> #define LUA_API extern "C"
>> #else
>> #define LUA_API extern
>> #endif
>> #endif
>>
>>is perfectly valid C code, which completely eliminates the
>>need for any C++ specifics, and would keep the issue in
>>question from ever arising again. There really isn't any
>>benefit in not writing a header like this, so why not?
>
>That code is conforming C code, but not strictly conforming C code.
>Since it uses a pre-processor token ("__cplusplus") that is in the
>namespace reserved for the implementation, then any given C
>implementation is allowed to assigned whatever meaning it likes to that
>code. Only the language C++ assigns a meaning to __cplusplus, the
>language C makes no guarantees. It is only when you use a cooperating
>C implementation that __cplusplus will have the meaning you like. In
>other words a C implementation is at perfect liberty to define the
>token __cplusplus for its own purposes.
Incorrect. A C99 implementation is not allowed to define that macro.
Section 6.10.8.5:
"""
The implementation shall not define the macro __cplusplus, nor shall it
define it in any standard header.
"""
Benno (who doesn't know about C89)