プロが教えるわが家の防犯対策術!

c言語のヘッダーファイルを自作したのですが、コンパイルすると、main.c の5行目に、以下のエラーがあると出ます。
"cannot use local functions"
プログラムとヘッダーファイルを下に書くので、どこが間違っているか、教えてください。

/*ここから main.c */

#include <stdio.h>
#include "facter.h"

int main(int argc, const char * argv[])
{
int a,b,c,d = 0,e;

printf("数値を入力 : ");
scanf("%d",&a);

c = a;

b = twobit(a);

printf("\n%dを2bitに直すと[%d]です。\n",c,b);
return 0;
}


/* ここから facter.h */

#include <stdio.h>

int twobit(int a){
int n = 0,l,count = 0,o;
o = a;
do{
o /= 2;
}while( o != 1 || o != 0);
if(o = 1){
while(a > 0){
l = a % 2;
if(l == 1){
n = n * 10 + 1;
}else{
n = n * 10;
}
a /= 2;
}
}else{
do{
a /= 2;
count++;
}while(a != 0);
n = 1;
for(;count > 1;count--){
n *= 10;
}
return (n);
}

「C言語で自作ヘッダーを作ったのですが..」の質問画像

質問者からの補足コメント

  • 「これじゃ2bitになんねーよ」というのは無しでお願いします。
    試作途中でエラーに詰まってしまったのと、今回の目的は自作ヘッダーファイルを作ることですので。
    あと、一部遠回りしてる部分がありそうですが、そこについてのツッコミも無しでお願いします。

      補足日時:2016/02/17 00:48
  • C言語入門 ~PC教室の先生が教えるプログラミング講座~ というサイトの、 ヘッダファイルを自作する というところを参考に作りました。
    {}の対応はしっかりしてます。
    それと、ヘッダの中に関数を使わないのであれば、どのようにして、関数の呼び出しを行うのですか?
    初心者で、わからない事だらけなのですが、よろしくお願いします。

      補足日時:2016/02/17 07:31

A 回答 (5件)

> {}の対応はしっかりしてます。



factor.h の方の対応が取れていません。

#includeは「指定したファイルをその場所にコピペする」ようなものです。
括弧の対応等の判定は、ファイル毎ではなく、全部「コピペ」した後の状態で行います。
そのため、真因のあるファイル(factor.h)とは違うファイル(main.c)でエラーが報告されることがよくあります。
この場合、いくらmain.cを直しても、エラーは治りません。


> C言語入門 ~PC教室の先生が教えるプログラミング講座~ というサイトの、 ヘッダファイルを自作する というところを参考に作りました

他の部分は見てませんが、その「ヘッダファイルを自作する」のところは説明が全然足りません。


より詳しくは「分割コンパイル」で検索してください。
    • good
    • 1
この回答へのお礼

なるほど!
やっぱり説明足りてなかったんですね…
ありがとうございました。
再度訂正して、チャレンジしてみます。

お礼日時:2016/02/17 09:30

とりあえず



> ヘッダの中に関数を使わないのであれば、どのようにして、関数の呼び出しを行うのですか?

---main.c---
#include <stdio.h>
#include "facter.h"

int main(int argc, const char * argv[]){
 省略
}


---facter.h---
int twobit(int);


---facter.c---
#include "facter.h"

int twobit(int a){
 省略
}
    • good
    • 0
この回答へのお礼

ありがとうございました。
自分はどうやら、ヘッダーについて勘違いしていたようですね。
そのようにやってみます。

お礼日時:2016/02/17 09:27

>main.c の5行目に、以下のエラーがあると出ます。


>"cannot use local functions"

main.cのmain()がtwobit()内にあるローカル関数になってて、使われていませんよ。
ってエラーです。
それ以外にもエラーがあるはずですが。
# あと、おそらく警告も。
    • good
    • 0

ついでに指摘しておくけどヘッダに関数の定義を書いちゃダメ.

    • good
    • 0

{ と } の対応を確認すべし.

    • good
    • 0

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