ヘッダファイルなしでコンパイルしたい。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
carnage0216
記事: 20
登録日時: 4ヶ月前

ヘッダファイルなしでコンパイルしたい。

#1

投稿記事 by carnage0216 » 4ヶ月前

環境
Windows10 64bit
GCC(mingw)
OpenCV-MinGW-Buildhttps://github.com/huihut/OpenCV-MinGW- ... de/opencv2


このサイトhttp://d.hatena.ne.jp/Inuneco/20110714/p1に書いてあるopencvのプログラムをヘッダファイルなしで書き直したいのですが、どのようにすればよいでしょうか?

コード:

#include <cv.h>
#include <highgui.h>
int main () {
cvNamedWindow ("test", CV_WINDOW_AUTOSIZE);
cvWaitKey (0);
cvDestroyWindow ("test");
return 0;
}

私個人で書いたものはこちらです。

コード:

#define cvNamedWindow;
int cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) );
CV_WINDOW_AUTOSIZE     = 0x00000001;//the user cannot resize the window, the size is constrainted by the image displayed
int main () {
cvNamedWindow ("test", CV_WINDOW_AUTOSIZE);
cvWaitKey (0);
cvDestroyWindow ("test");
return 0;
}
エラーがこちらです。

コード:

C:\Users\Daito\Desktop\NamedWindow.c:3:22: warning: ISO C99 requires whitespace after the macro name
 #define cvNamedWindow;
                      ^
C:\Users\Daito\Desktop\NamedWindow.c:4:1: warning: useless type name in empty declaration
 int cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) );
 ^~~
C:\Users\Daito\Desktop\NamedWindow.c:4:20: error: expected identifier or '(' before 'const'
 int cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) );
                    ^~~~~
C:\Users\Daito\Desktop\NamedWindow.c:5:1: warning: data definition has no type or storage class
 CV_WINDOW_AUTOSIZE     = 0x00000001;//the user cannot resize the window, the size is constrainted by the image displayed
 ^~~~~~~~~~~~~~~~~~
C:\Users\Daito\Desktop\NamedWindow.c:5:1: warning: type defaults to 'int' in declaration of 'CV_WINDOW_AUTOSIZE' [-Wimplicit-int]
C:\Users\Daito\Desktop\NamedWindow.c: In function 'main':
C:\Users\Daito\Desktop\NamedWindow.c:11:1: warning: implicit declaration of function 'cvWaitKey' [-Wimplicit-function-declaration]
 cvWaitKey (0);
 ^~~~~~~~~
C:\Users\Daito\Desktop\NamedWindow.c:13:1: warning: implicit declaration of function 'cvDestroyWindow' [-Wimplicit-function-declaration]
 cvDestroyWindow ("test");
 ^~~~~~~~~~~~~~~

どうかよろしくお願いいたします。

出来れば解決までの過程なども教えていただけると助かります。

アバター
usao
記事: 1420
登録日時: 5年前

Re: ヘッダファイルなしでコンパイルしたい。

#2

投稿記事 by usao » 4ヶ月前

何故そんなことをしたいのか謎.
あなたのコードが使用するすべての要素に関する宣言を全部正確に書けばよいのでしょうが,
(最も単純には,includeしていたヘッダの内容を全てコピペして持って来ればいい.
 とはいえ,各ヘッダの中にもさらにincludeが複数あるだろうから,それらも全て面倒を見る必要がある.)
わざわざそんな面倒すぎる苦行をしなくても済むように,includeという手段が用意されているのだと思いますが…


> 私個人で書いたものはこちらです。
何かを試すにしても,少なくとも,「ご自身が使っている言語の文法に則って書いてみる」べきなんじゃないでしょうか.
(ヘッダをincludeする代わりに書いた部分の各行の意味や必要な理由等々を説明できますか?)

carnage0216
記事: 20
登録日時: 4ヶ月前

Re: ヘッダファイルなしでコンパイルしたい。

#3

投稿記事 by carnage0216 » 4ヶ月前

ヘッダファイルをコピペすれば済む話ですが、あえてヘッダファイルを使用せずに定義などをしていくことの方が私は学習しやすいです。
というのもヘッダファイルには無駄な記述も多く今回載せたプログラムにおいても、使うヘッダファイル 内にいらないものがいくつか存在しているため、深く掘り下げて、opencv特有の関数が標準関数でどう表せるのかをしるためには、あえてヘッダファイル を使わずに定義を書く込むという結論に至りました。
変数の部分は名前はなんでもよいため定義がないなど、わからない点もあり、基礎の参考書を手元に置きながら今回のプログラムと関係のある部分を見つけてはコピペしています。

アバター
usao
記事: 1420
登録日時: 5年前

Re: ヘッダファイルなしでコンパイルしたい。

#4

投稿記事 by usao » 4ヶ月前

マルチポストですか
https://teratail.com/questions/121654

標準関数で表す という言葉の意味合いがよくわかりませんが…
何らかの関数の具体実装を知りたいのであれば,ヘッダだけ相手にしてても仕方ないですし,普通にOpenCVのソースを見れば良いのでは.

返信

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