[cppll:1111] <tips?>使えないマクロ

Subject:
[cppll:1111] <tips?>使えないマクロ
From:
tsutsumi‐at‐pf.highway.ne.jp <tsutsumi@...>
Date:
Fri, 8 Feb 2002 01:34:10 +0900 (JST)
X-Mailer:
FreeML Web Mailer XP; SP2
Message-Id:
<5326833.1013099650842‐at‐www2.local.freeml.net>
堤です。

コンパイル時に C と C++ のどちらかでコンパイルされたか判別
するのに

#ifdef __cplusplus
... <--- C++ コード
#else
... <--- C コード
#endif

とするのは良く知られていると思いますが、実行時に C と C++
のどちらかでコンパイルされたかを判別する方法は知られていな
いと思うので紹介します。

#でも、殆んど使われないでしょうけどねぇ・・・。

#define iscplusplus (sizeof(char) == sizeof('A'))

使い方は

#include <stdio.h>

#define iscplusplus (sizeof(char) == sizeof('A'))

int main()
{
 if(iscplusplus) {
   printf("このコードは C++ コンパイラでコンパイルされました.\n");
 } else {
   printf("このコードは C コンパイラでコンパイルされました.\n");
 }

 return 0;
}

見たいな感じです。

これは文字定数のサイズが C では int 型のサイズに等しいのに
対し、C++ では char 型のサイズに等しい事を利用しています。

ではでは。

スレッド

Navigation

検索

[検索ヘルプ]

Maintener: Tietew <www.tietew.jp>
Powered by Ruby on Rails, Mongrel, PostgreSQL, and Hyper Estraier.
click here