##コマンドライン引数の個数が実行中一時的に少なくなっている
C言語とGTK+を組み合わせたプログラムを作っています。GTK+で作ったウィンドウを開くプログラムの中に、別のプログラムのmain関数の中身を移植しています。(プログラム実行中にウィンドウを開くのが目的で、最初はsystem関数でウィンドウを開くプログラムをインサートしていたのですが、ウィンドウを閉じないと先に進めないという問題から、逆の方法を取っています。)
###発生している問題・実行状況
最初にコマンドライン引数の個数でusageを表示するエラーチェックをしたいのですが、そのusageもその後の処理の様子もどちらもprintfで出てきてしまいます。実行中に他の箇所でprintfを使って確認すると、場所によって個数が変わっています(正しい個数が2なのですが、エラーチェックを通る時1になっています)。
$ ./image-viewer add.c windowの宣言後のチェック 2 windowの宣言後のチェック 1 エラーチェック内でのチェック 1 用法: cci prgfile [--code] --code 生成コード表示 if文でのチェック 2
###該当のソースコード
コンパイルのコマンド
$ gcc -o image-viewer image-viewer.c cci_pars.c cci_tkn.c cci_tbl.c ccicode.c cci_misc.c pkg-config --libs --cflags gtk+-2.0
下記はimage-viewer.cです。他のファイルはhttps://github.com/iwabuchiken/Hayashi_1/tree/master/originalを参照してください。
#include <gtk/gtk.h> #include "cci.h" #include "cci_prot.h" /* ボタンがクリックされたときに呼び出される関数 */ static void cb_button_clicked (GtkWidget *button, gpointer user_data) { /* メインループを終了 */ gtk_main_quit (); } /* メイン関数 */ int main (int argc, char **argv){ GtkWidget *window; printf("windowの宣言後のチェック %d\n",argc); /*よそから移植したコード*/ if (argc == 1) { printf("エラーチェック内でのチェック %d\n",argc); puts("用法: cci prgfile [--code] "); puts(" --code 生成コード表示"); exit(1); } if (compile(argv[1])) { if (argc>=3 && strcmp(argv[2],"--code")==0) code_dump(); else printf("if文でのチェック %d\n",argc); } /*よそから移植したコード終わり*/ /* GTK+の初期化およびオプション解析 */ gtk_init (&argc, &argv); /* ウィンドウの作成 */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); /* ウィンドウの大きさの設定 */ gtk_widget_set_size_request (window, 800, 600); { GtkWidget *vbox; vbox=gtk_vbox_new(FALSE,2); gtk_container_add(GTK_CONTAINER(window),vbox); { GtkWidget *image; GtkWidget *button; image = gtk_image_new_from_file (argv[1]); gtk_box_pack_start (GTK_BOX (vbox), image, TRUE, TRUE, 0); /*ボタンの作成*/ button = gtk_button_new_with_label ("Quit"); /* ボタンをウィンドウに配置 */ gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); /* ボタンがクリックされたときに呼び出される関数の設定 */ g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (cb_button_clicked), NULL); } } /* ウィンドウの表示 */ gtk_widget_show_all (window); /* メインループ */ gtk_main (); return 0; }
###試したこと
コマンドライン引数の個数が変わるという経験が初めてで打つ手がわかりませんでした。検索の仕方が悪いのか、同じような事例も見つけられませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
Mac OSX GTK+ver.2.0 miで編集しターミナルでコンパイル
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/29 04:26