【メモ】C++からC言語を呼び出すための方法

目安時間:約 2分

C++で書いているけど、Cのソースコードを読み込みたいときがある。

 

しかし、普通にC++からCの関数を呼び出すと、

 

というエラーになってしまう。

 

 

調べてみると、C++コンパイラは、マングル(mangle)と呼ばれる仕組みがあり、

 

オーバーロードの実現のためなどに、引数の型やクラス・名前空間名を使って

 

修飾された一意の名前を作成して、引き当てに使っているらしい。

 

しかしCコンパイラはマングリングしないため、

 

マングル前の素の名前になっている。

 

それで引き当てに失敗してしまうということだ。

 

対策としては、C++コンパイラに対して、

 

Cの関数であることを明示し、マングリングしないようにさせる必要がある。

 

 

そのためには、以下のようにするだけで、Cのソースコードを利用できるようになる。

 

 

いいね!

 

■参考

http://www.wagavulin.jp/entry/2017/02/09/215036

 

カテゴリ:C++  [コメント:0]

2点間の距離(ヒュベニの公式)

目安時間:約 2分

地図を扱っていると、2点間の距離を計算することがよくある。

 

平面上での2点間の距離は、学生時代に数学で習った式で計算することができる。

 

ただ、それでは正確な距離とは言えない。

 

 

地球の丸みを考慮した距離を計算したいときにはどうすればよいか。

 

方法はたくさんあるが、最も簡単でそれなりの精度が計算できる、

 

ヒュベニ(Hubeny)の公式を用いることが多い。

 

詳細な計算式や概念は他のサイトを探せばたくさん見つかるため

 

ここでは割愛させていただく。

 

例えば以下のサイトはとても分かりやすい。

 

二地点の緯度・経度からその距離を計算する

 

参考サイトではJavaの実装が書かれていたが、

 

私はC++を使っているため、C++でHubenyクラスを作成した。

 

 

 

使い方は簡単である。

 

 

 

計算すると以下の値となり、参考サイトと同じ値となった。

 

 

今度時間があればヒュベニ(Hubeny)以外の計算も試してみたいところ。

 

ページの先頭へ