忍者ブログ
SE稼業で見知った小ネタをまとめてみます。 サーバ・ヲタなので、主にそっち系のTipsを。
[13]  [12]  [11]  [10]  [9]  [8]  [7]  [5]  [4]  [3]  [2
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Solaris9(SPARC) 用ミドルウェアをHP-UX11i(Itanium2)に移植する仕事をしているが。

Sun 純正CコンパイラやGNU C(gcc)コンパイラは
事前定義マクロ(predefined macro)が豊富なので、
それらを使って、
OS別CPU別のコーディングができる。

ところが。

今回はHP純正Cコンパイラ‘HP C/HP-UX’を使うのだが、
OSやCPUを識別するための事前定義マクロが
プログラマ・ガイドに記載されていないため、
いろいろ探し回ったり調べたりした。

こんなんが、使える。

  __unix          UNIX である
  __hpux          HP-UX である
  __ia64          Itanium CPU を識別する

  __func__        このマクロ名を記述してる関数名


ついでに、明文化されてるやつも書いとけ。

  __STDC__        ANSI C準拠
  __DATE__        コンパイル日付
  __TIME__        コンパイル時刻
  __FILE__        ソースファイル名(basenameのみ)
  __LINE__        行番号


あと、
デバッグ用表示機能文用マクロ定義に
__VA_ARGS__
を使ったりするが、
“HP C/HP-UX”でも使えた。
例えば、
    #define dbg(...)  (fprintf(stderr,"%s:%u @%s",__FILE__,__LINE__,__func__),fprintf(stderr," "__VA_ARGS__))

        /**
         * funcition: funcHello
         */
        void funcHello(void) {
    #ifdef DEBUG
            dbg("hello HP-UX\n");
    #endif
        }

    ただし、
    SQLを組み込んだものだと、
    Oracle Pro*C/C++(proc)プリコンパイラは、
        __VA_ARGS__
        __func__
    を識別できず、コンパイルエラーになる。
    ここは創意工夫が必要。
    ちなみに、
    “proc”は
        ORA_PROC
    という事前定義マクロがある。
    これ、結構便利。
    プリコンパイラに通させたくないヘッダのinclude とか以下のようにする。
        #ifndef ORA_PROC
        #include <netdb.h>
        #include <sys/socket.h>
        #include <netinet/in.h>
        #endif


ちっと問題が。
OSのバージョンやコンパイラのバージョンを取得できる事前定義マクロが見当たらない。
"HP aCC"C++コンパイラだと
    __HP_aCC
という事前定義マクロでコンパイラ・バージョンが分かるようだが、
それのライセンスがないから使えないのよねぇ。
はあ、不便。
コンパイラの“-D”オプションで指定しろ、てか。
    % cc -D__HPUX=`uname -r` hoge.c


そもそも、
なんでOSにHP-UX を選定したんだろ、ユーザさんは。
Itanium2サーバなら、
Linux(RedHat Enterprise)も選択できだぢゃん。
そしたら、GNU C 使えたのに。

ま、
あと2ヶ月で今のプロジェクトともオサラバするし、
良しとするか。

PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
お見えになった方の数
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
最新CM
[08/30 godnowhere]
最新TB
プロフィール
HN:
godnowhere
性別:
男性
職業:
システム・エンジニア
趣味:
機械いぢり
analyzer
忍者ブログ [PR]