[解決済み】関数名を囲む括弧の意味とは?
2022-04-07 22:25:42
質問
私のプロジェクトのソースファイルの1つに、次のようなC関数定義がありました。
int (foo) (int *bar)
{
return foo (bar);
}
注意:
foo
ということは、関数ポインタではありません。それとも、そうなのでしょうか?
この再帰的な呼び出しはどうなっているのでしょうか?
どのように解決するのですか?
プリプロセッサー的なものが動いていない場合。
foo
のシグネチャは、次のものと同等です。
int foo (int *bar)
関数名の周りに不要と思われる括弧を付けるのは、関数と関数に似たマクロが同じ名前で存在し、プログラマーがマクロの展開を防ぎたい場合だけです。
この習慣は、最初は少し奇妙に思えるかもしれませんが、C ライブラリでは 同じ名前のマクロと関数をいくつか提供する .
そのような関数とマクロのペアの1つが
isdigit()
. ライブラリはこれを次のように定義することができる。
/* the macro */
#define isdigit(c) ...
/* the function */
int (isdigit)(int c) /* avoid the macro through the use of parentheses */
{
return isdigit(c); /* use the macro */
}
あなたの関数は上記とほとんど同じに見えるので、あなたのコードでもこのようなことが起こっているのではないかと思います。
関連
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] JavaScriptの変数のスコープとは何ですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] 関数のソースコードを見るにはどうしたらいいですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】関数の前のエクスクラメーションマークは何をするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「ポインタから異なるサイズの整数へのキャスト」エラーが発生するのはなぜですか?
-
[解決済み】エラー:'for'ループの初期宣言はC99モードでしかできない【重複
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】 strcpyとstrdupの比較
-
[解決済み] clang: error: linker command failed with exit code 1が表示されるのはなぜですか?
-
[解決済み】LEALアセンブリ命令は何をするのですか?
-
[解決済み】LinuxのI_PUSHに相当するもの
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】.axfファイルとは何ですか?