GSL Shell 学習:ffi.cdef 二重定義は?

2016-03-05 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、
7、2、0、0、1、 0、0、0、0、0(40)で、換算ポイント 88pt 。
「Perl」「C言語」「化学業界」「硝子業界」「グルコサミン」、
「Python」「Firefox」bg値変動のみ。
「FM COCOLO」「e-radio」「FM青森」全く変化無し。
・-・ - -・

さて、本文。(これも Lua 学習?)


先月(2016-02-05)の記事:「GSL Shell 学習:LFS 自作始め
等で書いている、

ffi.cdef[[ ……… ]] について、

同じものを二重に定義したらどうなる???


例えば、上記の記事で書いた、
local ffi = require'ffi'
ffi.cdef[[
int _stat ( const char* fname, void* buf );
]]
の場合、
local ffi = require'ffi'
ffi.cdef[[
int _stat ( const char* fname, void* buf );
int _stat ( const char* fname, void* buf, int hoge );
]]
の様に、(結果的に)二重定義になっていた場合、

参照時に、

  _ = ffi.C._stat( ffi.cast('char*', 'hoge'), stat, 0 )

と、(後から定義した形式で)書いたら、

パラメータエラー!


先に定義した形式:

  _ = ffi.C._stat( ffi.cast('char*', 'hoge'), stat )

では正常に処理される。

つまり、

関数プロトタイプ(?)の二重定義は可能だが、
先に定義した方が有効。(後のものは無効)


では、“typedef”の二重定義は???

local ffi = require'ffi'
ffi.cdef[[
typedef unsigned char Byte;
typedef unsigned char Byt;
]]
の様に、(結果的に)二重定義になっていた場合は?
a=ffi.new('Byte[3], {2,4,6})
b=ffi.new('Byt[3], {4,6,8})

print( a[2], b[2] ) -- → 6, 8
の様に、両方有効!

でも、これって二重定義とは云わないもの。


本当の二重定義とは、
local ffi = require'ffi'
ffi.cdef[[
typedef unsigned char Byte;
typedef signed char Byte;
]]
こうですね。
で、結果は?
c=ffi.new('Byte[1], {130})
print( c[0] ) -- → 130
でした。

つまり、関数プロトタイプ(?)の二重定義と一緒。

typedef での二重定義は可能だが、
先に定義した方が有効。(後のものは無効)


だが、“struct”ではダメだった:
ffi.cdef[[
typedef struct Matx {
int type; int step; int* refcount;
char* data;
int rows; int cols;
} Matx;
typedef struct Matx {
int type; int step; int* refcount;
int* data;
int rows; int cols;
} Matx;
]]
では、
後で定義したものが再定義エラー:

  attempt to reddefile 'Matx' at line

だから、

typedef struct の二重定義は不可。


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


160207
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
04 | 2017/05 | 06
- 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 - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク