- ベストアンサー
エラーメッセージ「invalid conversion from `void (*)()' to `void (*)(int)'」の解決方法
- die の宣言を void die(int sig); にしたのであれば、session_loop の中で die を呼出すときにも引数は必要です。
- また、最後の die の定義のところでも引数を取るようにしています。
- しかし、die 関数を呼び出す際に引数を指定しているにも関わらず、エラーメッセージ「void の値が本来の意味通りに無視されませんでした」が表示されています。なぜこのエラーが発生しているのか、何か勘違いしている可能性があります。
- みんなの回答 (4)
- 専門家の回答
関連するQ&A
- エラー「invalid conversion from `void (*)()' to `void (*)(int)'」
皆様、よろしくお願いしたします。RedHat9上で 次のような「鬼ごっこのプログラム」server.cをコンパイルしています。 $ g++ -o server server.c server.c: function 内の `void session_init(int, char, int, int, char, int, int)': server.c:134: invalid conversion from `void (*)()' to `void (*)(int)' というエラーが出てしまいます。 134行というと 「 signal(SIGINT, die);」 なのですが何が間違っているんでしょうか?
- ベストアンサー
- C・C++・C#
- int main(void)
C言語の問題集をやっているのですが、 本にはmain関数の最初にint main(void)のような書き方が してあります。 学校ではmain() と習ったのですが、本には上のようにかいてあります。 どのように違うのでしょうか? というかmain関数のところに引数が入っている意味がわかりません。 どういうことがというと(void)ってなんですか? またint mainというのはint型の関数だと思うのですが、 なかではdouble型とかも使えます。 お願いします。
- ベストアンサー
- C・C++・C#
- signal関数の使い方
標準関数のsignal()関数についてですが void (*signal(int sig, void (*func)(int)))(int); 関数の形式からしてよくわかりません。 僕のイメージでは関数のポインタというと void (*func)(int,int) という感じですが上の場合 void (*func(int,int))(int) /*引数は仮にint型*/ という形式になってますよね。末尾の(int)は引数のはずですがどこの引数になっているのかよくわかりません。 しかも関数の使用例などをみると signal(SIGINT, func); という形で使っており末尾の(int)がどこにいったのかさっぱりわかりません。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- bsearch関数
エラー 関数 `typespec' 内: 警告: 互換性のないポインタ型からの引数 5 個の `bsearch' を渡しますです int typespec(void) { static char *types[] = { "char", "int", "void" }; char *pt = token; if (bsearch(&pt, types, sizeof(types)/sizeof(char *), sizeof(char *), compare) == NULL) return NO; else return YES; } int compare(char **s, char **t) { return strcmp(*s, *t); } サイトや教科書を見たり読んだりして、標準ヘッダとも被らないように試みてみたのですが、余計エラーが増えてしまいます。「引数 5 個」ということは、全部アウトなんでしょうか? 過去の質問を見てみてもピンときません。暇な方がいるなら是非初心者にもわかりやすいアドバイスください。 (OSはLINUX。端末はGNOMEです)
- ベストアンサー
- C・C++・C#
- 関数の引数をvoid*でキャストする
最近見かけたCのプログラムで、関数の引数の型は void* なのですが、その関数を使うときに 引数をvoid*でキャストしていました。 例えば、 func ( (void*) p ); こういうことです。 私の知っている知識では、 void* と 任意の型のポインタは キャストなしに相互に代入可能です。 関数の引数でも、キャストは要らないものだと思っていました。 そうすると、引数を void* でキャストするのは無意味だと思うのですが、・・・ 違うのでしょうか。処理系によるとか。 逆に、関数の引数の型がchar*などで、渡すものが void* のときはどうなのでしょうか。 下のプログラムは、関数byte_orderの引数の型はvoid*ですが、int型へのポインタ( &a )を設定しています。私の環境では、コンパイルエラーも警告もないし、動作も正常です。 #include <stdio.h> #include <string.h> void byte_order(void *vp) { char char_array[4]; strncpy(char_array, vp, 4); printf("出力します:%x %x %x %x\n", char_array[0], char_array[1], char_array[2], char_array[3]); } int main(void) { int a = 0x12345678; byte_order(&a); return 0; } このプログラムは単なる一例であって、質問はバイトオーダに関するものではありません。 また、C言語の質問であって、C++ではありません。
- ベストアンサー
- C・C++・C#
- C キャスト方法を教えてください
C言語の初心者なのですが、 int abc(int(*read)(void*, int, int), int size, char* data); ような関数で第1引数の値をキャストするときどうすればよいですか。 int read = (????)NULL; そもそもint(*read)(void*, int, int)ってどういう意味ですか?
- ベストアンサー
- C・C++・C#
- static付き宣言の初期化
static付きの宣言をした場合の変数の初期化について教えてください。(ANSI-C) int func(void) { static int si; static char sca[10]; static char *scp; /* 何らかの処理 */ return 0; } このように関数内でstatic付きで宣言したとき、変数はどのように初期化されますか? siは0、sca[0]からsca[9]までは'\0'、scpはNULLで初期化されますか? また、このようなstatic付きの宣言が関数の外にあった場合は、どのように初期化されますか?
- ベストアンサー
- C・C++・C#
- C言語 共通ヘッダ作成の学習に関する事
共通ヘッダー作成の学習をしています。 共通ヘッダ <getputch.h> #ifndef __GETPUTCH #define __GETPUTCH #if defined(_MSC_VER) || (__TURBOC__) || (LSI_C) /* MS-Windows / MS-DOS系 */ #include <conio.h> #static void init_getputch(void) {} #static void term_getputch(void) {} #else /* Cursesライブラリが提供されるUNIX/Linux/macOS */ #include <curses.h> #include <stdio.h> #include <string.h> #undef getch #undef putchar #undef puts #undef printf #undef scanf static void init_getputch(void) { initscr(); refresh(); } static void term_getputch(void) { endwin(); } static int putch(int ch) { int result = addch(ch) == OK ? ch : EOF; refresh(); return result; } static int __putchar(int ch) { return putch(ch); } static int __printf(const char *format, ...) { int count; va_list ap; static char __buf[4096]; va_start(ap, format); vsprintf(__buf, format, ap); va_end(ap); count = printw("%s", __buf) == OK ? strlen(__buf) : EOF; refresh(); return count; } static int __puts(const char *s) { int count = printw("%s\n", s) == OK ? strlen(s) + 1 : EOF; refresh(); return count; } static int __getch(void) { int ch; cbreak(); noecho(); ch = getch(); nocbreak(); echo(); return ch; } #define getch __getch #define putchar __putchar #define printf __printf #define puts __puts #define scanf __scanw #endif #endif 私が使用しているOSはWindows10、 エディタ Visual Studio Code1.89.1 です。 コンパイルしたら<curses.h>のファイルが見つからない旨の エラーメッセージが出ます。 説明では、 _MSC_VER、__TURBOC__、LSI_Cは、それぞれVisualC++、 Borland C++(Turbo C++)、LSI Cの処理系で、処理系識別のために 独自に定義されているマクロです。 上記以外のMS-Windows用の処理系をお使いであれば、その処理系で 独自に定義されているマクロを追加する必要があります。 という事です。 もしかしたら、マクロを追加しないといけないのかもしれませんが 調べ方が分かりません。 どうしたら良いのでしょうか。ご指南を頂きたく投稿しました。
- 受付中
- C・C++・C#
- int main(int argc, char* argv[]) についての質問
こんにちは.つね日ごろ思っている質問させてください. Cの参考書には, (1) void main(void) { } (2) int main(int argc, char* argv[]) { return 0; } の2つのパターンが記載されていますが, どういう違いがあるのでしょうか? (1)の場合main関数は,型を持たず,引数も持たない. ※Turbo Cなどのコンパイラーでは, return文がないと警告出ます. (2)の場合は,int 型をかえし,引数はint型 変数と char型ポインタ配列(?) を指定している. といったくらいしか分かりません. (2)に関してもう少し述べれば, コマンドラインからファイルを指定し,実行することが できると勉強した記憶があるのですが, 理解があいまいです. 特に(2)の場合のmain関数の意味と,その使い方について アドバイスお願い致します.
- ベストアンサー
- C・C++・C#
- 関数の引数なしを変数に代入したら入ってきた数値は何?
デバッグソフトで自分のプログラムを動かしていたときに、 int test_func(char x) { x = x + 1; ------(中略)----------- return x; } int main(void) { int test_val; ------(中略)----------- test_val = test_func; ------(中略)----------- } このようにtest_func(char x)という関数の戻り値を変数test_valに代入するつもりだったのですが、間違って引数部分を書かずにコンパイルしてしまいました。 このときにコンパイルでエラーが出ると思ったのですが、コンパイル完了でデバッガで変数test_valをみてみると何か値が入っていました。 ちょっと気になったのですが、この変数の中に入った値はいったい何なのでしょうか。ご存じの方いらっしゃいましたらご教授お願いいたします。
- ベストアンサー
- C・C++・C#
- 初期パスワードを変更する際に英数大文字・小文字が選択できないため、新パスワードの設定ができません。
- 他のファイルに入力する際は問題なく入力できますが、初期パスワードの入力後の文字の確認ができないため、不便を感じています。
- パソコンのOSはWindows10で、接続は無線LANを使用しています。電話回線の種類はひかり回線です。
お礼
お手数おかけしています。 $ gcc -o sever server.c -lcurses として上手くいきました。 些細な事でした。