返り値の型 マクロ名 関数名(引数、・・・)って?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mokopoko

返り値の型 マクロ名 関数名(引数、・・・)って?

#1

投稿記事 by mokopoko » 13年前

お世話になっています。よろしくお願いします。本のサンプルコードを追っているんですが、どうしてもわからないところがあり質問させていただくことにしました。
.hファイル内で見つけたつぎの構文です。

コード:

 
void ESUTIL_API esInitContext ( ESContext *esContext );
ESUTIL_APIは#defineで下記コードのように定義(?)されています。
ESUTIL_APIを記述することで、どういった効能があるのでしょうか?


ちなみにESUTIL_APIを削除して

コード:

 
void esInitContext ( ESContext *esContext );
としても、実行後の動作はあったときと変わりませんでした。(正常に表示されました)

.cファイルに、関数の中身が記述されていて、関数名の前に同じようにESUTIL_APIとついています。こちらも削除してみましたが、実行後の動作はかわりませんでした。(正常に表示されました)

恐縮ですが、よろしくお願いします。※当方、Cをかじりつつ、objective-cをちらほらしているだけのものです。

コード:

 
#ifndef ESUTIL_H
#define ESUTIL_H

#include <OpenGLES/ES2/gl.h>

#ifdef __cplusplus

extern "C" {
#endif

#define ESUTIL_API    //★★★ここ!
#define ESCALLBACK

typedef struct
{
    GLfloat   m[4][4];
} ESMatrix;

typedef struct
{
   void*       userData;
   GLint       width;
   GLint       height;
} ESContext;

void ESUTIL_API esInitContext ( ESContext *esContext );//★★★ここです!
…
//本ではつづきます。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 返り値の型 マクロ名 関数名(引数、・・・)って?

#2

投稿記事 by h2so5 » 13年前

まずここらへんを見てください。
http://www.geocities.jp/ky_webid/win32c/057.html

Windows環境でDLLを作るときに関数の呼び出し規約の明示が必要になるわけです。
こんな感じですね。

コード:

void __stdcall esInitContext ( ESContext *esContext );
しかしそれ以外の環境では必要ありません。

コード:

void esInitContext ( ESContext *esContext );
環境ごとに書き方を変えるのは面倒なのでESUTIL_APIを関数名の前に書いておき環境によって定義を切り替えます。

Windows環境でDLLとして扱うときには ESUTIL_API に __stdcall を定義しておいて、
それ以外の場合に定義を空にすることで簡単に呼び出し規約の切り替えができるようになります。

mokopoko

Re: 返り値の型 マクロ名 関数名(引数、・・・)って?

#3

投稿記事 by mokopoko » 13年前

h2so5様
理解できました!ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る