プロが教える店舗&オフィスのセキュリティ対策術

MacでC言語の勉強をしています。

WindowsでBASICのプログラム経験が多少あり、
C言語のサイトも参考にしていたので、Macでも同じように出来るかな?
と思っていると、出来ませんでした。

CreateThread関数を使おうとしていたのですが、Cではwindows.hのようなファイルを参考にしたサイトではインクルードさせていたのでコピーペーストし、
createthreadとしたのですが、(おそらく)「windows.hのようなファイルはない」のようなエラーが出ます。

Macではマルチスレッドは使用できないのでしょうか。
それともほかのやり方があるのでしょうか。

すいませんがご教示いただけると幸いです。
よろしくお願いします。

A 回答 (4件)

undeclaredというエラーは、コンパイル時にある関数を呼び出す処理を解釈するときにその関数がその時点でどこにも宣言されていないことを示します。

無論定義(実装)もありません。
なので単純にC言語のルールが守られていないというエラーです。スレッド関係のエラーではないようです。
main関数の前に

void paint( void );

と宣言するだけでなおるはずです。
    • good
    • 0

どうしてもC言語とういことであればC言語で使えるライブラリやpthreadを使わないとMacではだめでしょうね。


もしC言語のみということにこだわる必要がないのであればC++とboostを使用されることをお勧めいたします。
boost::threadはポータブルに使えてソースが環境依存しにくくなるので便利です。
MacでもWindowsでもご自身で書かれたプログラムが根本的な処理は同じようにかけるということです。無論環境ごとにboostライブラリをビルドしてやる必要があり、環境ごとにそのライブラリを使ってください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

学校の課題なので、C言語でないとだめなのです。
ただ、最初に書かせていただいたとおり、BASICの経験があり少しくらいはプログラミング経験があるので、やってみようかと思い質問させていただいています。


No.1の方の回答を参考に調べ、

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

//グローバル変数
int point; //得点
int life; //ライフ


main(){
int flag;
int ly;

//描画関数のスレッド
pthread_t thread;
pthread_create(&thread,NULL,paint,NULL);
pthread_join(thread,0);


getchar();
return 0;
}


//画面描写するルーチン(無限ループマルチスレッド用)
paint(){
for (;;){
 何らかの処理~

//スレッドの一時休止
usleep(160);
}
}

こんな感じで書いたのですが、
error: 'paint' undeclared (first use in this function)
と表示されます。

どのように修正したらいいのでしょうか。

お礼日時:2011/07/14 17:19

ここらへんが参考になるでしょう。



Threading Programming Guide
http://developer.apple.com/library/mac/documenta …

C言語でそこまで高レベルのことをやるなら、Cocoa(Objective-C)を系統的に勉強したほうがいいと思いますが?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

申し訳ないですが、私には読解できませんでした。
そしてマルチスレッドが高レベルだということは知りませんでした。

No.1の方の回答を参考に調べ、

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

//グローバル変数
int point; //得点
int life; //ライフ


main(){
int flag;
int ly;

//描画関数のスレッド
pthread_t thread;
pthread_create(&thread,NULL,paint,NULL);
pthread_join(thread,0);


getchar();
return 0;
}


//画面描写するルーチン(無限ループマルチスレッド用)
paint(){
for (;;){
 何らかの処理~

//スレッドの一時休止
usleep(160);
}
}

こんな感じで書いたのですが、
error: 'paint' undeclared (first use in this function)
と表示されます。

どのように修正したらいいのでしょうか。

お礼日時:2011/07/14 17:17

Macでも当然マルチスレッド実装は出来ます。


ただしCreateThreadはWIndowsが提供しているAPIですからMACでは使えません。
MACでのプログラミング経験がないのでわかりませんが、
POSIXスレッドが使えたはずです。
pthread_createで検索してみてください。
使用例がわんさかヒットするはずです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

pthread_createで調べ、自分でいろいろやっているのですが
pthread_create関数の第三引数でエラーが出てしまいます。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

//グローバル変数
int point; //得点
int life; //ライフ


main(){
int flag;
int ly;

//描画関数のスレッド
pthread_t thread;
pthread_create(&thread,NULL,paint,NULL);
pthread_join(thread,0);


getchar();
return 0;
}


//画面描写するルーチン(無限ループマルチスレッド用)
paint(){
for (;;){
 何らかの処理~

//スレッドの一時休止
usleep(160);
}
}

こんな感じで書いたのですが、
error: 'paint' undeclared (first use in this function)
と表示されます。

どのように修正したらいいのでしょうか。

お礼日時:2011/07/14 17:15

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