【初心者歓迎】C/C++室 Ver.44【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/11/03(土) 00:20:13ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.43【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1190860744/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0449デフォルトの名無しさん
2007/11/23(金) 14:44:32なんとなく書いてみただけからスルーしてもらっておkです
#include <stdio.h>
typedef void (*func_t)(void);
typedef func_t (*func2_t)(void);
void hello(void){printf("Hello\n");}
func_t hello_func(void){return hello;}
func2_t hello_func_func(void){return hello_func;}
int main(void){
hello_func_func()()();
return 0;
}
0450デフォルトの名無しさん
2007/11/23(金) 14:45:200451デフォルトの名無しさん
2007/11/23(金) 17:01:21Aは1秒ごとに、Bは5秒ごとに呼ばれるものとします。
この1秒と5秒はおおよそで良いので、sleepで止めます。
このAとBを並行して実行させたいとき、
普通はマルチスレッドにするものですか?
Linuxです。
0452デフォルトの名無しさん
2007/11/23(金) 17:03:530453451
2007/11/23(金) 17:16:07そこまでは「およそ」じゃないんです。
リアルタイム性は要らない程度の意味でした。
設定秒数を渡して5秒とか1秒ってのは変わりうるので。
0454デフォルトの名無しさん
2007/11/23(金) 17:40:440455デフォルトの名無しさん
2007/11/23(金) 17:42:29sleep(1);
++cnt;
if (cnt % intervalA == 0) A();
if (cnt % intervalB == 0) B();
}
0457デフォルトの名無しさん
2007/11/23(金) 18:39:37どれくらいの誤差まで許されるかが問題だな
0458デフォルトの名無しさん
2007/11/23(金) 18:40:50だからなんなんだw
455のソースをms単位に変更するだけじゃないか
0459デフォルトの名無しさん
2007/11/23(金) 18:44:390460デフォルトの名無しさん
2007/11/23(金) 18:59:330461デフォルトの名無しさん
2007/11/23(金) 22:10:54いきなりスコープ解決演算子を二つ続けて、関数を呼び出す意味が分からないのですが、
普通は [クラス名] :: [関数名]() のようにして、どのクラスのメソッドを呼び出しているか
指定する為に使うんですよね?
誰かクラス名が無い場合の意味を教えてください
0462デフォルトの名無しさん
2007/11/23(金) 22:19:15そこらへんは趣味の世界だし
0463デフォルトの名無しさん
2007/11/23(金) 22:22:29そのクラスに属していない、グローバルネームスペースの関数を呼び出すことを明示するために使う。
MFCのソースはその典型。
0464デフォルトの名無しさん
2007/11/23(金) 22:23:41どこのクラスにも名前空間にも属していない名前を明示的に指定したいときに使う。
void f(); //(1)
class Hoge
{
void f(); //(2)
void g()
{
::f(); //(1)を呼ぶ
f(); //(2)を呼ぶ
this->f(); //(2)を呼ぶ
}
};
0465デフォルトの名無しさん
2007/11/23(金) 22:37:18ありがとうございます
なくても良かったんですね^^;
聞いて本当によかった。もうすぐ発狂するところでした。
0466デフォルトの名無しさん
2007/11/23(金) 22:47:33分かっているとは思うけど、「なくても良い」ではないよ。
>>464の(1)を呼ぶ例のように、場面によっては必要だからね。
0467デフォルトの名無しさん
2007/11/23(金) 22:57:440468デフォルトの名無しさん
2007/11/23(金) 22:58:29>>464を読んで「なくても良かった」という結論はないな。
0469デフォルトの名無しさん
2007/11/23(金) 23:42:390470デフォルトの名無しさん
2007/11/24(土) 00:11:40かったるいし。
0471デフォルトの名無しさん
2007/11/24(土) 22:04:08Visual Studio .NET 2005 C++ の WIN32 プロジェクトで、
TRACE("hogehoge="+hogehoge)
のように、自分用デバッグログを出力ウィンドウかどこかに出したいのですが、方法がわかりません。
標準出力に出力してもどこにも出力されていません(と思う)
どなたかご教授お願いいたします。
0472デフォルトの名無しさん
2007/11/24(土) 22:19:47基本はOutputDebugString。ただし引数は文字列の一つのみ。
CRTのデバッグルーチンも悪くないが、引数が真面目過ぎて多少面倒。
void dbgprintf (LPCTSTR fmt, ...)
みたいなのを自分で用意しておくのが無難じゃないかな。
0473デフォルトの名無しさん
2007/11/24(土) 22:51:16C言語を使って構文解析ソフトCaboChaを使いたいのですが
ttp://chasen.org/~taku/software/cabocha/libcabocha.html
↑このサイトの通りに以下のプログラムを実行してみたのですが
Undefined symbol: cabocha_destroy_
Undefined symbol: cabocha_new_
Undefined symbol: cabocha_sparse_tostr_
↑このようなエラーが表示されてうまくできません。
どなたかわかるかたいらっしゃいませんか?
〜実行したプログラム〜
#include <cabocha.h>
#include <stdio.h>
int main (int argc, char **argv)
{
cabocha_t *c;
char p[1024] = "太郎は次郎が持っている本を花子に渡した。";
c = cabocha_new(argc, argv);
printf ("INPUT: %s\n", p);
printf ("RESULT:\n%s", cabocha_sparse_tostr(c, p));
cabocha_destroy(c);
return 0;
}
0474デフォルトの名無しさん
2007/11/24(土) 22:54:04以下がソースです。
ifstream fin;
TCHAR line[252];
LPTSTR buff[3];
int result[64][3];
stringstream ss;
fin.open(_T("temp.csv"));
if(!fin.is_open()) // 開いていなければ、FALSEを返す
{
return FALSE;
}
int i = 0;
while (!fin.eof()){
fin.getline(&line[0],sizeof(line));
buff[0] = strtok(line,",");
buff[1] = strtok(NULL,",");
buff[2] = strtok(NULL,",");
ss.str(""); //stringstreamをクリア
ss << buff[0] << _T(" ") << buff[1] << _T(" ") << buff[2];
ss >> result[i][0] >> result[i][1] >> result[i][2];
//カウンタ
i++;
}
fin.close();
0475デフォルトの名無しさん
2007/11/24(土) 22:54:372,2,49,
2,4,0,
...
2,46,27
2,48,0
fin.close()のひとつ前の行でブレークポイントを入れると「アクセス違反」のエラーがでます。
i++の行でブレークポイントを入れると、i=0のときはうまくresult配列にデータが入ってくれますが、
i=1以降は、何も代入されないようです。
これを直す方法をご教授くださいませんか。
なお、今回のcsvファイルにはint型に代入するデータしかありませんが、
以下のような文字交じりのcsvファイルも使用したいので、string型の変数に代入する予定です。
36,1,1,3,Orange,50,長崎
24,1,2,2,Red,50,静岡
...
↑のプログラムがうまくいっていたら、stringstreamから>>演算子でstring型の変数に代入するつもりでしたが、
stringに代入するにあたって、何か注意するべき点がありましたら、ご教授ください
0476デフォルトの名無しさん
2007/11/24(土) 22:55:44「コンパイル方法」の項を読めば分かる
0477471
2007/11/24(土) 23:17:36お答いただいてありがとうございます。
OutputDebugString("hoge");
でコンパイルすると、
error C2664: 'OutputDebugStringW' : 1 番目の引数を 'const char [5]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
とコンパイルエラーにになり(昔はでなかったような)、そこで
const char a[] = "hoge";
OutputDebugString((LPCWSTR)a);
とやってみたところ、コンパイルは通り、実行もできるのですが、残念ながらあいかわらずどこに"hoge"が出力されるのかわかりませんでした。
何か良い方法がありましたらお願いします。
0478デフォルトの名無しさん
2007/11/24(土) 23:18:32OutputDebugStringA
0479デフォルトの名無しさん
2007/11/24(土) 23:51:42の方が好みだなー
0480471
2007/11/25(日) 00:00:46OutputDebugStringA !!目から鱗ありがとうございます!!!
コンソールにも出したかったのですが、これは一応自己解決しましたのでご報告。
FILE *stream;
if (!::AttachConsole(ATTACH_PARENT_PROCESS)) { //XP以降はアタッチ
::AllocConsole(); //無理な場合は新たに開く
}
freopen_s(&stream, "CON", "r", stdin); // 標準入力の割り当て
freopen_s(&stream, "CON", "w", stdout); // 標準出力の割り当て
cout << "hoge" << endl;
::FreeConsole(); //アタッチ解放
以上です、ありがとうございました!
0481デフォルトの名無しさん
2007/11/25(日) 00:02:560483デフォルトの名無しさん
2007/11/25(日) 13:11:04cout << "ok" << endl;
else
cout << "ng" << endl;
この場合はokと表示されるのですが
if ("aa" < "bb")
cout << "ok" << endl;
else
cout << "ng" << endl;
この場合はngと表示されます。
aのほうが文字コードが小さいのでokと表示されることを期待しているのですが
なぜこうなってしまうのでしょうか?
0484デフォルトの名無しさん
2007/11/25(日) 13:15:39大小を比較しているだけだよ。
文字順の比較をしたければ strcmp などを使え。
上記の意味が分からなければ、まずはちゃんとした入門書などを読んだほうがいい。
0485デフォルトの名無しさん
2007/11/25(日) 14:39:570486デフォルトの名無しさん
2007/11/25(日) 15:45:20それは文字列が格納されているメモリアドレスを比較してるだけ
文字列の内容を比較したいなら strcmp を使え
0487デフォルトの名無しさん
2007/11/25(日) 16:09:55つ[ std::string("aa") < std::string("bb")]
0488デフォルトの名無しさん
2007/11/25(日) 16:17:47共通ヘッダ: typedef struct TAG TYPE_NAME;
TYPE_NAME nantoka1;
ソースA: struct TAG { int a; int b; };
ソースB: nantoka1 = { 3, 5 }
こんな風にしてみたんですが、ソースBは 'TAG' を認識してくれません。
どうすればいいでしょうか
0489デフォルトの名無しさん
2007/11/25(日) 16:27:38共通ヘッダ:
struct TAG { int a; int b; };
extern struct TAG nantoka1;
ソースA:
いらない。
ソースB:
struct TAG nantoka1 = {3, 5}
0490デフォルトの名無しさん
2007/11/25(日) 16:39:43nantoka1が必要なソースでexternするようにした方がいいと思う。
0491488
2007/11/25(日) 17:05:020492デフォルトの名無しさん
2007/11/25(日) 23:01:29連結リストの先頭のHeadをポインタで宣言しないのはどうして?
ポインタで宣言したほうが構造体分無駄にならなくなくない?
0493デフォルトの名無しさん
2007/11/25(日) 23:03:56以下がVC+2005ではコンパイル・実行できますが、Linux g++ 4.0ではコンパイル
できません。エラーコードはテンプレートだらけでよくわかりません。
何が違うのでしょうか?
#include <iostream>
#include <boost/bind.hpp>
using namespace std;
using namespace boost;
int someKeisan(int n1, int n2)
{
return n1 * n2;
}
int main()
{
cout << bind(someKeisan, _1, 10)(6) << endl;
return 0;
}
0494デフォルトの名無しさん
2007/11/25(日) 23:06:44ポインタで宣言できるなら、そうすればいいんじゃないか?
むしろ、先頭用の構造体を持ってる実装のほうが珍しいと思うが。
0495デフォルトの名無しさん
2007/11/25(日) 23:11:42そうなの?
Googleとかで引っかかるサイトだと普通に宣言してるのが多いから
そういうもんかと思ってたよ
何にしてもありがとう
疑問が一つ解けたよ
0496デフォルトの名無しさん
2007/11/25(日) 23:16:08Cygwinでg++ 4.1.1だけどコンパイルできたよ。
0497デフォルトの名無しさん
2007/11/25(日) 23:17:45「連結リスト」でググって一番上にあるサイトからポインタで実装してるぞw
その次のはダミー作ってたけど。
0498デフォルトの名無しさん
2007/11/25(日) 23:18:38ヘッダーも存在してるし、
実装が未熟なんですかね?
0499デフォルトの名無しさん
2007/11/25(日) 23:22:47OS : Fedora Core 4
g++ 4.0.0でデフォルトのものを使ってます。
0500デフォルトの名無しさん
2007/11/25(日) 23:26:35boostを入れてないってことないか?
0501デフォルトの名無しさん
2007/11/25(日) 23:29:22functionやtokenizerは動作しますんで
boostは入ってると思います。
/usr/include/boostにhppファイルはあります。
0502デフォルトの名無しさん
2007/11/25(日) 23:41:100503デフォルトの名無しさん
2007/11/26(月) 00:02:09先頭要素が必ず存在するようにしたほうがコードを簡略化できるケースもあるから
あえてポインタではなく構造体を使用するということもあるよ。
よほど大きな構造体でない限り、高々1個を省略することは大きな意味はないから。
0504デフォルトの名無しさん
2007/11/26(月) 00:22:16そうですか。
tr1/functionalヘッダとtr1::placeholdersを指定しても
ダメでした。
VC++で我慢します。
0505502
2007/11/26(月) 01:38:50以下結果と環境だけ。エラーメッセージは長いので省きます。
[FreeBSD 6.2R : コンパイル成功]
>GNU C++ version 3.4.6 [FreeBSD] 20060305 (i386-undermydesk-freebsd)
> compiled by GNU C version 3.4.6 [FreeBSD] 20060305.
>GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
[ Fedora7 : コンパイル失敗 ]
>GNU C++ version 4.1.2 20070925 (Red Hat 4.1.2-27) (i386-redhat-linux)
> compiled by GNU C version 4.1.2 20070925 (Red Hat 4.1.2-27).
>GGC heuristics: --param ggc-min-expand=98 --param ggc-min-heapsize=129178
[ Cygwin : コンパイル失敗 ]
>GNU C++ version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) (i686-pc-cygwin)
> compiled by GNU C version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125).
>GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
コンパイル失敗した二つは同じエラーが出てる。
>a.cpp:13: error: no match for call to ‘(boost::_bi::bind_t<int, int (*)(int, int), boost::_bi::list2<boost::arg<1>, boost::_bi::value<int> > >) (int)’
0506503
2007/11/26(月) 01:49:36以下boost/version.hpp 内の定義比較。
[FreeBSD 6.2R]
>#define BOOST_VERSION 103401
>#define BOOST_LIB_VERSION "1_34_1"
[Fedora7][Cygwin]
>#define BOOST_VERSION 103301
>#define BOOST_LIB_VERSION "1_33_1"
コンパイル成功したFreeBSDだけ、1_34_1 だ
0507502
2007/11/26(月) 01:51:57これがboostのバージョンが原因なら、boostバージョンアップで解決するかもね。
0508デフォルトの名無しさん
2007/11/26(月) 02:06:32にしたらどう?
0509502
2007/11/26(月) 02:19:41なんか修正されたんだな。リリースノートどこにあるんだろ・・・。
とりあえずすっきりした。これで寝れる。
>>508
だめ。
0510デフォルトの名無しさん
2007/11/26(月) 15:06:00VS2005でC++を使って組んでいるのですが、「関数宣言はされているものの実態が存在しない」というリンクエラーが大量に出て困っています。
(私の言う関数とは、クラスの関数。つまりメソッドです)
自分で作ったのなら当然実体も定義するのですが、これは他人のソースで、さらにその人は「とりあえずヘッダに必要そうな関数をかたっぱしから宣言しておく」人のようです。
実体が存在しない関数に関しては「一度も呼び出した無い」そうで、コンパイルオプションだかで「一度も呼び出してない関数は、宣言もろとも無視する」ことができる(そうやって実行ファイルを作りテストした)そうなのですが、どうすればよいのでしょうか?
(残念ながら、そのソースを書いた人自身に質問することができないのです)
0511デフォルトの名無しさん
2007/11/26(月) 15:08:02警告じゃなくて?
0512デフォルトの名無しさん
2007/11/26(月) 15:18:44仮想関数の場合は実体は必要だけどね。
0513デフォルトの名無しさん
2007/11/26(月) 15:19:500514デフォルトの名無しさん
2007/11/26(月) 15:22:34すいません、自己解決しました
>>510は友人の悩みをヒアリングして私が(私の体験っぽく)書き込んだのですが、511の指摘で「確かに警告ならわかるんだけどなぁ」と思い私自身でソースを調べてみました。
単に友人が渡されてるlibファイルを組み込んでいないだけの話でした(ちなみにその関数はちゃんと呼び出されていました。呼び出されていたからこそ警告ではなくエラーとなっていました)
お騒がせしてすいませんでした
0515デフォルトの名無しさん
2007/11/26(月) 15:25:21そんなミスは誰でもよくやることですから気にしなくてよいのですよ。
と、ご友人にはお伝えください。
0516493=504
2007/11/26(月) 15:41:12コンパイル・実行できました。
0517デフォルトの名無しさん
2007/11/26(月) 23:15:38これまでマクロとか使ったことがなくて…教えてください。
#define IX(i,j) ((i)+(N+2)*(j))
と書かれていて
1次元の配列ポインタに x[IX(i,j)]
こう書かれていた場合、どこをアクセスしてるのでしょうか。
また
#define SWAP(x0,x) {float * tmp=x0;x0=x;x=tmp;}
これも意味がわかっていません。
おねがいします、助けてください
0518デフォルトの名無しさん
2007/11/26(月) 23:21:23落ち着いて展開すれば大丈夫。
x[ IX( i, j ) ]→x[ i + N + 2 * j ]
一次元配列を二次元配列のように扱う時に使ったりするかな?
SWAPのほうは単純に2つの値(float *)を入れ替えてるだけ。
SWAP( fp1, fp2 );とかけば
{ float * tmp = fp1; fp1 = fp2; fp2 = tmp; }
0519デフォルトの名無しさん
2007/11/26(月) 23:34:20ものすごい優しく応えてくれて、なんかほんとに涙出てきました。
>一次元配列を二次元配列のように扱う時に使ったりするかな?
まさしくその通りです。
1次元配列の i+N+2*j ということですね。
{1 2 3 4
5 6 7 8
9 8 7 6
5 4 3 2} の場合 2段目の6にアクセスしたいとき N=4だから
IX(1,1) = 1+4+2*1 = 6 つまり、前から6番目の6にアクセスできますね!
ありがとうございます。。。ほんとようやくわかりました(;;
SWAPの方は、入る値は float * 型じゃないとダメ、ですよね?
これに1次元の配列ポインタが入ると、配列そのものが入れ替わる、ということですよね?
ほんと、、、わからなくて、悶々として、誰にも聞けなかったので
本当に助かりました。ありがとうございました(;;
0520デフォルトの名無しさん
2007/11/27(火) 01:11:23>これに1次元の配列ポインタが入ると、配列そのものが入れ替わる、ということですよね
単に変な文章になっているだけかもしれないけど、配列そのものが入れ替わるのではなく、
ポインタが指しているものが入れ替わるだけだよ。
int a[100], b[100];
int *p = a;
int *q = b;
SWAP(a, b); // コンパイルエラー
SWAP(p, q); // pがbを指し、qがaを指すようになる。a, bの実体は何も変わらない。
0521デフォルトの名無しさん
2007/11/27(火) 14:42:13これを高速にソートするにはどういった方法があるのでしょうか?
頻繁にソートが呼び出されるのでバブルソートでいいものなのかどうなのか判断つきません
0522デフォルトの名無しさん
2007/11/27(火) 14:51:15頻繁の程度にもよるし、どの程度の遅さまで許容されるかにもよるし、
実際やってみて遅くなければ別にいいんじゃね?
0523デフォルトの名無しさん
2007/11/27(火) 15:04:460524デフォルトの名無しさん
2007/11/27(火) 15:11:550525デフォルトの名無しさん
2007/11/27(火) 16:36:22ありがとうございました
0526デフォルトの名無しさん
2007/11/27(火) 18:19:500527デフォルトの名無しさん
2007/11/27(火) 21:00:210528wolf ◆8VH3XAqjlU
2007/11/27(火) 22:09:04>>525
**** may be something complicated *****
strategy pattern
http://home.earthlink.net/~huston2/dp/strategy.html
0529デフォルトの名無しさん
2007/11/28(水) 00:48:43[]を使用した際に想定した動きをしてくれません。
下記がそのソースです。
#include <iostream>
#include <map>
#include <string>
// キー
struct StaffKey {
int section;
std::string code;
};
bool operator <(const StaffKey& lhs, const StaffKey& rhs) {
return lhs.section < rhs.section || lhs.code < rhs.code;
}
// データ
struct StaffData {
std::string name;
};
// キーとデータを紐付ける
typedef std::map<StaffKey, StaffData> StaffMap;
void insert(StaffMap& staffs, int sect, const char* cd, const char* nm) {
StaffKey key = {sect, cd};
StaffData& data = staffs[key];
data.name = nm;
}
0530529
2007/11/28(水) 00:49:27StaffMap staffs;
insert(staffs, 1, "ab123", "Taro");
insert(staffs, 2, "ab123", "Jiro");
insert(staffs, 1, "ab111", "Hanako");
insert(staffs, 1, "ab133", "Ken");
for (StaffMap::iterator it = staffs.begin(); it != staffs.end(); ++it) {
const StaffKey& key = it->first;
const StaffData& data = it->second;
std::cout << key.section << "," << key.code << ":" << data.name << std::endl;
}
std::cout << std::endl;
for (StaffMap::iterator it = staffs.begin(); it != staffs.end(); ++it) {
const StaffKey& key = it->first;
const StaffData& data = staffs[key];
std::cout << key.section << "," << key.code << ":" << data.name << std::endl;
}
}
0531529
2007/11/28(水) 00:50:28実行結果
----------------
1,ab111:Hanako
1,ab123:Taro
1,ab133:Ken
2,ab123:Jiro
1,ab111:Hanako
1,ab123:Taro
1,ab133:
2,ab123:Jiro
はじめにイテレータを用いて全件のダンプを出力しています。
次に、[]を使ってデータを取得&出力しているのですが、
一部のデータのみ値が取得できない状態に陥っています(ab133:Kenのデータ)
独学で勉強しており他の人に聞くことが出来ないため、どこがおかしいのか全く判りません。
どうか助力をお願いします
長々とすみません。
なお、環境はLinux + GCC4.1.2です。
0532デフォルトの名無しさん
2007/11/28(水) 00:53:27allocator が無いからじゃないかな?(綴り怪しいけど)
0533デフォルトの名無しさん
2007/11/28(水) 00:58:09> bool operator <(const StaffKey& lhs, const StaffKey& rhs) {
> return lhs.section < rhs.section || lhs.code < rhs.code;
> }
これが順序付けになってないっぽい。
↓これでいいかな?
if (lhs.section < rhs.section) return true; else if (rhs.section < lhs.section) return false;
return lhs.code < rhs.code;
0534529
2007/11/28(水) 01:11:31mapのテンプレート引数にstd::allocator<StaffKey> を追加してみましたが変わらずでした。
(見よう見まねに意味判らずやってます)
>>533
出来ました!!
||だとショートサーキットが有効になるので大丈夫だろうと思って深く考えていませんでしたが
やはり単純なミスだったんですね。。。
助かりました。どうもありがとうございました
0535デフォルトの名無しさん
2007/11/28(水) 01:16:33という仕様とは完全に異なるからな。
0536529
2007/11/28(水) 01:27:07ってことですよね?
だから正しく順序付けが出来ず、key指定時にデータの特定が出来なかった。
0537デフォルトの名無しさん
2007/11/28(水) 02:17:08ながーい構造体とかポインタの参照は
コンピュータ内部では一つ一つ計算してたぐり寄せているのでしょうか?
仮にそうだとして10万くらい続いているとしたら
終わりのx->y->z ←こいつのポインタを持っておけば無駄が省けるのでしょうか?
0538デフォルトの名無しさん
2007/11/28(水) 02:19:17持っておけるなら。
0539デフォルトの名無しさん
2007/11/28(水) 02:25:03やはりそうでしたか
これでまた一つ疑問が解けました
ありがとうございました
0540デフォルトの名無しさん
2007/11/28(水) 04:46:32a->b->cは間接参照で、実行時に中身を追うから、bに相当するポインタをtmpとして持つ意味があるけど。
もちろんこれはC/C++の話で、
他言語だとCの->に相当する部分で.を使用するから別の話になるし
配列として宣言して、あえて->を使う場合なんかはあてはまらないけどね。
0541デフォルトの名無しさん
2007/11/28(水) 09:31:450542デフォルトの名無しさん
2007/11/28(水) 10:02:240543デフォルトの名無しさん
2007/11/28(水) 10:07:21天皇陛下万歳
0544デフォルトの名無しさん
2007/11/28(水) 10:08:200545デフォルトの名無しさん
2007/11/28(水) 10:40:100546デフォルトの名無しさん
2007/11/28(水) 12:01:54シリアルポートの開け方について質問させてください.
環境は…Windows XP SP2,Borland C++ Compiler 5.5,言語はC言語です.
この環境で下のコードをコンパイルしようとするのですが,
C:\borland\bcc55\Include\winuser.h 4804: 宣言が正しく終了していない
C:\borland\bcc55\Include\winuser.h 4811: 型名が必要
という二つのエラーがでて,コンパイルできません.
winuser.hの該当箇所は, typedef struct tagINPUT{…} の部分です.
いろいろいじってみたのですが,どうも見当がつきません.どこがおかしいのでしょうか.
下のコードは,
ttp://www.geocities.jp/terukat/_geo_contents_/win/comm.html
ttp://members.jcom.home.ne.jp/0434383301/vc10.htm
ttp://plaza.harmonix.ne.jp/~ahoshino/vb/CreateFile.htm
を参考にしました.
#include<windows.h>
int main(void){
HANDLE hComm = CreateFile(
"COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
return 0;
}
0547デフォルトの名無しさん
2007/11/28(水) 12:05:11bccで他にWinAPIを呼ぶプログラムを書いたことは?
それがあるならそれを参考に見直してみればいい。
そうでないなら、そういうサンプルを探せばいい。
0548デフォルトの名無しさん
2007/11/28(水) 12:20:06Ctrl + Alt Dlt を無視したいとかそういうアプリではどうにもならない割り込みのあれかな?
■ このスレッドは過去ログ倉庫に格納されています