【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?

今、Atmega88をAVR Studio4 + WINAVRでC言語プログラミングを行っているのですが、

void bridge_master_oper()
{

----(中略)-------------

}


このように宣言された関数があります。



void bridge_master_oper(void)
{

----(中略)-------------

}


このような引数に”void”として宣言している場合と何か違いはあるのでしょうか?

A 回答 (3件)

純粋に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++だとこの違いはなく、どちらも「引数無し」の意味です。

この回答への補足

現在解析を行っているプログラムで”void bridge_master_oper()”というようにこの関数が宣言されています。

その際に、この関数を呼び出す際に


bridge_master_oper((cc1101_client *)&gClient);




このようなプログラムの書き方をしています。

この”gClient”というのはグローバルの構造体変数として宣言している者なのですが、特に引数で渡す必要はないと思うのですが、なぜこのようにしているのかわかりましたら教えて頂けませんでしょうか?

補足日時:2012/04/25 10:52
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/04/25 10:38

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



宣言なら #1 の通り, 定義ならどちらでも同じ.
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/04/27 11:31

> この”gClient”というのはグローバルの構造体変数として宣言している者なのですが、特に引数で渡す必要はないと思うのですが、なぜこのようにしているのかわかりましたら教えて頂けませんでしょうか?



いくつか思いつくものはありますが、正確にはわかりません。
グローバル変数と言えど、名前がグローバルに使える、というだけの変数なので、引数で渡しても問題ありません。

・bridge_master_operがもともと引数で構造体を受け取るように実装されている。
グローバル変数を直接操作するように作られていない
・なんらかの理由でローカル変数として宣言できないのでグローバル変数にしている。
組込み系では、いろいろ制限があるので、こちらの理由かもしれません。

この回答への補足

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

今回は助かりました。ありがとうございます。
http://sourceforge.jp/projects/cc1101driver/svn/ …

補足日時:2012/04/29 10:53
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。ここら辺の内容とか、”C:\WinAVR-20100110\doc”

このパスにあるWINAVRとかのマニュアルとかに載ってたりしますでしょうか? もし詳しかったら教えて頂けますでしょうか?

お礼日時:2012/04/27 11:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!