Lua:pcall で #ifdef もどき

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

さて、本文。

3ヶ月前(2016-03-05)の記事「GSL Shell 学習:ffi.cdef 二重定義は?
で、
  ・・・・・
  ・・・・・
  関数プロトタイプ(?)の二重定義は可能だが、
  先に定義した方が有効。(後のものは無効)
  ・・・・・
  ・・・・・
  typedef での二重定義は可能だが、
  先に定義した方が有効。(後のものは無効)
  だが、“struct”ではダメだった:
  ・・・・・
  ・・・・・
  だから、
  typedef struct の二重定義は不可。
  ・・・・・
  ・・・・・
と書いた。

今回、“pcall”なる Lua 関数を学習した。

こんな解説記事もある:
pcall講座 - orzWiki
  Luaの実行中にエラーがでて画面上に赤字でlua runtime error・・・の文字が
  出ることがあります。(lua compile error~は又別の話)
  このエラーが出るとそこでLuaの実行が中断してしまい、
  モデルが正常に動かなくなるなどすることがあります。
  コレ自体、Luaが暴走してRCが本体ごと死んでしまう(無限ループとか
  の場合のように)のを防ぐための安全装置なのですが、不便です。
  しかし、Luaにはこのような事態にも対処できる機能が備わっています。
  その名も"pcall関数"。詳しい説明は以下で。
  ・・・・・
  ・・・・・


“pcall”の本来の使い方は、こんな感じ?
f = |x| 1/x
----- 上の様な関数定義があった時、
----- ret = f(x) の代わりに次の様な2行とする。
flag, ret = pcall( f, x )
if not flag then ret = inf end
----- こうしておけば、
----- 引数 x が 0 の時、“ゼロ割”エラーを回避できる。
ショボイ例ですが。


さて、本題。
「ffi.cdef」で、同名の struct を複数回定義すると、
エラーで終了するので、それを回避する。
pcall( ffi.cdef, [[ typedef struct hoge{ int x; int y; } HOGE; ]] )
これで、
  ffi.cdef[[ typedef struct hoge{ int x; int y; } HOGE; ]]
が複数回出てきても、1回のみの実行となり、
エラー発生を回避できる。


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


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


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

コメントの投稿

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

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



おきてがみ

最新記事
カレンダー
02 | 2017/03 | 03
- - - 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
ブックマーク