• ベストアンサー

関数宣言で引数に(void)というのと()の違い

今、Atmega88をAVR Studio4 + WINAVRでC言語プログラミングを行っているのですが、 void bridge_master_oper() { ----(中略)------------- } このように宣言された関数があります。 void bridge_master_oper(void) { ----(中略)------------- } このような引数に”void”として宣言している場合と何か違いはあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

> この”gClient”というのはグローバルの構造体変数として宣言している者なのですが、特に引数で渡す必要はないと思うのですが、なぜこのようにしているのかわかりましたら教えて頂けませんでしょうか? いくつか思いつくものはありますが、正確にはわかりません。 グローバル変数と言えど、名前がグローバルに使える、というだけの変数なので、引数で渡しても問題ありません。 ・bridge_master_operがもともと引数で構造体を受け取るように実装されている。 グローバル変数を直接操作するように作られていない ・なんらかの理由でローカル変数として宣言できないのでグローバル変数にしている。 組込み系では、いろいろ制限があるので、こちらの理由かもしれません。

diy_sunny
質問者

お礼

回答頂きありがとうございます。ここら辺の内容とか、”C:\WinAVR-20100110\doc” このパスにあるWINAVRとかのマニュアルとかに載ってたりしますでしょうか? もし詳しかったら教えて頂けますでしょうか?

diy_sunny
質問者

補足

お世話になっております。 現在Atmega88で作っているプログラムで、プログラム動作中に勝手に意図しないウォッチドックタイムアウトが発生するような暴走のような症状が出ていていろいろとプログラムを変えてみたりして改善してみたのですが、最初は今回のプログラムの書き方の問題かなと思っていたのですが、別のところを変更して改善されました。 今回は助かりました。ありがとうございます。 http://sourceforge.jp/projects/cc1101driver/svn/view/branches/C1101_source_ATmega88_bridge_ver0x17/?root=cc1101driver

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「定義 (自動的に宣言でもある)」と「(定義でない) 宣言」とでは状況が異なるのですが, どちらを意図していますか? 宣言なら #1 の通り, 定義ならどちらでも同じ.

diy_sunny
質問者

お礼

回答頂きありがとうございます。すみません、プログラム初心者なもので、言葉の使い方がなっていなくて誠に申し訳ありません。 たぶん#1の意味です。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

純粋にC言語の場合。 引数voidの場合は「引数を一つもとらない」という宣言になります。 void bridge_master_oper(void) と宣言されたら、使うときは bridge_master_oper() だけがOKです。 bridge_master_oper(10) 等とするとエラーになります。 引数無しの場合は「任意の引数を取る」という宣言になります。 void bridge_master_oper() と宣言されたら、使うときは bridge_master_oper() bridge_master_oper(10) どちらも文法上はエラーではありません。(期待された動きをするかどうか、は別の問題) void bridge_master_oper(...) と同義になります。 C++だとこの違いはなく、どちらも「引数無し」の意味です。

diy_sunny
質問者

お礼

回答頂きありがとうございます。詳細も説明して頂きありがとうございました。

diy_sunny
質問者

補足

現在解析を行っているプログラムで”void bridge_master_oper()”というようにこの関数が宣言されています。 その際に、この関数を呼び出す際に bridge_master_oper((cc1101_client *)&gClient); このようなプログラムの書き方をしています。 この”gClient”というのはグローバルの構造体変数として宣言している者なのですが、特に引数で渡す必要はないと思うのですが、なぜこのようにしているのかわかりましたら教えて頂けませんでしょうか?

関連するQ&A