トップページ⇒tech
1001コメント330KB

スレを勃てるまでもないC/C++の質問はここで 4

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/09/17(水) 15:41:48
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
0733デフォルトの名無しさん2008/12/21(日) 12:50:34
>>731
つうか、例えば横512ドットだとして
左は、0 <= x < 256
右は、256 <= x < 512
とすれば、元から境目に存在はしない
0734デフォルトの名無しさん2008/12/21(日) 12:56:53
上下左右別々に扱うわけか。
0735デフォルトの名無しさん2008/12/21(日) 13:21:21
>>728
////////////////////////////////////////////////////////////////////////////////////////////////
//  指定された2つの RECT構造体が、重なっているか判定する
//  重なっていると true
//  かさなっていないと false を返す。
bool    RectLap( const RECT *a, const RECT *b )
{
    //  改良失敗
//  if( (a->top < b->bottom) && (a->bottom < b->top) && (a->left<b->right) && (a->right>b->left) )
//  {
//      return true;
//  }

    if( a->top < b->bottom )
        if( a->bottom > b->top )
            if( a->left < b->right )
                if( a->right > b->left )
                    return true;

    return false;
}
となります
改良の余地があればご指摘お願いします
0736デフォルトの名無しさん2008/12/21(日) 13:41:57
単純な□同士の判定なのか。
それで重いってことは、よほど沢山の弾があるのか?
0737デフォルトの名無しさん2008/12/21(日) 13:53:01
100発もないのですが、どうしても重くなるのです
別スレッドで処理しているのですが、
CPUが割り当てられなくて処理落ちしてるとかも
考えられますか?
0738デフォルトの名無しさん2008/12/21(日) 13:57:12
同期処理に時間がかかってんじゃね?
別スレッドにするメリットってあんの?
0739デフォルトの名無しさん2008/12/21(日) 14:00:43
Celeron 2.53GHz
重たいわけもないでして
昔作ったやつは100発でもいけたので
不思議なのです
変えたといえばコンパイラだけですが
VC++6.0 -> VC++ 2008 Express にしただけです
0740デフォルトの名無しさん2008/12/21(日) 14:02:09
>>738
スレッドを使った理由は技術的好奇心だけです
元の1スレッドに戻してみます
0741デフォルトの名無しさん2008/12/21(日) 14:08:59
VC++ 2008 Express
リリースモードでコンパイルしたら実用レベルになりました
スレ汚しすいません
0742デフォルトの名無しさん2008/12/21(日) 16:01:12
学校の講義でC言語を学ぶことになったので、
VC++ 2008 ExpressをPCに導入したのですが、
計算をさせて、結果を表示するプログラムを作って実行させたら
結果が出力される前にDOS窓が閉じてしまいます。

どうしてでしょうか?
0743デフォルトの名無しさん2008/12/21(日) 16:05:28
そういう仕様
デバッグしないでいいならCtrl-F5(デバッグしないで実行)で。
それ以外にもとめる方法はいくつかあるが。
0744デフォルトの名無しさん2008/12/21(日) 16:06:39
>>742
あきらめろ
0745デフォルトの名無しさん2008/12/21(日) 16:14:07
>>743
ご親切にありがとうございました!

出力結果を無事に見ることができましたmm
0746デフォルトの名無しさん2008/12/21(日) 16:22:20
最近のム板もひどいな
0747デフォルトの名無しさん2008/12/21(日) 16:49:43
返り値に複数の値を返したいんだけど

こういう場合は
1、グローバル変数を使う
2、ポインタで参照渡し
3、1つの関数を関数をいくつかに分ける
4、関数内で返したい値を1つの値に纏めた後、呼び出し先でまとめられた値を復元する

どれがスマート?
0748デフォルトの名無しさん2008/12/21(日) 17:19:36
1 → よほど制限された状況でなければあり得ない解決法
2 → どうしても同時に2つ返す必要があるのであれば、普通はそうする
3 → 同時に2つ値を返す必然性がないのであれば、そうする
4 → よほど制限された状況でなければあり得ない解決法
5、構造体にして返す。コピーのコストに見合えばアリ
0749デフォルトの名無しさん2008/12/21(日) 18:08:53
質問です。
構造体に値を入れて、その入れた内容をポインタにキャストしたのですが
出来ませんでした(何も渡すことが出来なかった)

char *test;

test = (char *)&kouzoutai;

上記のようにしても駄目でした。
構造体をポインタにキャストする事は出来るのでしょうか?
0750デフォルトの名無しさん2008/12/21(日) 18:13:11
なにをもって「できなかった」と判断したのか
0751デフォルトの名無しさん2008/12/21(日) 19:14:24
まぁむちゃくちゃキャストしたんだろうな
構造体ないに文字列持ってたんだろうな、それを直接(char * )でキャストしようとしたんだろ?
0752デフォルトの名無しさん2008/12/21(日) 20:05:47
fopen_sなどのセキュアな関数が定義されている場合に定義される
マクロって何かありますか?
それが定義されていればセキュアな関数を使うようにしたいのです。
0753デフォルトの名無しさん2008/12/21(日) 20:05:57
>>749
kouzoutai の型が分からない限り答えようがない
0754デフォルトの名無しさん2008/12/21(日) 20:30:29
>>752
処理系名のマクロじゃないかな?
0755デフォルトの名無しさん2008/12/21(日) 21:17:43
>>752
一般的な方法はまだない。Open WatcomとVisual C++を個別にマクロで検出するしかない。
0756デフォルトの名無しさん2008/12/21(日) 21:55:04
VCのバージョンしかないんじゃないかな?
0757デフォルトの名無しさん2008/12/21(日) 22:23:21
ソースみたら

 _MSC_VER >= 1400

で判別してるものがあったのですが、これで大丈夫ですかね
0758デフォルトの名無しさん2008/12/21(日) 23:29:53
#if defined(_MSC_VER) && _MSC_VER >= 1400 か
0759デフォルトの名無しさん2008/12/21(日) 23:32:19
どもです
0760デフォルトの名無しさん2008/12/22(月) 15:54:01
べたのメモリ上に二分木などを構築するライブラリやサンプルソースを
ご存知の方いないでしょうか?
メモリマップトファイル上にツリーを作って、複数のプロセスから参照したいと思っています。
0761デフォルトの名無しさん2008/12/22(月) 16:23:15
>>760
意味がわからん
0762デフォルトの名無しさん2008/12/22(月) 16:29:33
「ヒープじゃなく、指定した領域 (メモリマップトファイル) を使う
 バイナリツリーが欲しい」
以外の解釈が可能か?
いや俺は見た事ないし、書くとしたら大変そうだが。
0763デフォルトの名無しさん2008/12/22(月) 16:34:49
そのmmapした領域からallocとfreeをする関数を書けば
いいだけじゃないの?

各データは固定長だろうから、それこそ配列にして
使用済みかどうかのフラグを持つだけでもいいし
0764デフォルトの名無しさん2008/12/22(月) 16:40:25
スレチならすんません

理解しているのはC言語の基礎だけです
DOS窓で動く、ジャンケンゲーム、数当て(BIGorSMALL)、石取りゲーム
くらいは作れるようになりました
この後一体どういう学習をすれば、Windows上で動く簡単なツールなんかを作れるようになりますか?
「GUI(?)をつくりたい」って言えばいいんですかね?

環境はWinXPhome/VC++2008
Windowsフォームアプリケーション?みたいなのもやってみたんですがさっぱりです
とりあえず、ウインドウを表示して、次に画像なんかを表示して〜
みたいなものはどうやってやればいいですか?
分かりにくかったらすいません宜しくお願いします
0765デフォルトの名無しさん2008/12/22(月) 17:03:09
ウィンドウはOSの環境に依存する
C言語でWindowsAPIを使えばいい
Win32API,ウィンドウメッセージなんかでぐぐるといいが、
長いし(書くときはコピペするかウィザードで生成すればいいが)、少しとっつきにくいかもしれない

VCを使っているのなら、新規プロジェクト作成のウィザードから
Windowsアプリケーションを使うのもいい
どういうものを作りたいかによって選ぶべきと思う
0766デフォルトの名無しさん2008/12/22(月) 17:05:05
>>764
あなたの気のおもむくままに
0767デフォルトの名無しさん2008/12/22(月) 17:05:59
>>760
分かるには分かるが
面倒くせぇ
0768デフォルトの名無しさん2008/12/22(月) 17:06:45
>>765
回答ありがとうございます
Win32API?と、VCの機能を調べてみます
0769デフォルトの名無しさん2008/12/22(月) 20:31:59
VC++2008EEでただのCプログラムを作るにはどうすればいいですか?新規プロジェクトにはC++しかありません。
0770デフォルトの名無しさん2008/12/22(月) 21:44:39
C++をやっとけばいいよ
CとC++は同じものだと考えてとりあえずは問題ない
というのも、C++はbetter Cという考えがあるから

「C++ではない純粋なC」でないといけないというのは
ちょっと特殊
0771デフォルトの名無しさん2008/12/22(月) 21:47:21
C++ でプロジェクト作っても、
ファイルの拡張子を .c にすれば C になるはず
0772デフォルトの名無しさん2008/12/22(月) 22:50:56
今、ポインターを学んでるんですけど・・
なんでアドレスとか表示する意味があるんだ?
どうして、ポインターで指す必要があるんだ?
間接的にオブジェクトに代入してなんの意味がある?
ビット数の表示に意味なんてあるんだろうか?
いまやってることに、意味がない気がして・・
今、すげー・・やる気を失ってるところです・・
だれか・・元気付けてください・・
0773デフォルトの名無しさん2008/12/22(月) 22:55:00
>>772
すごく使うことになるのでとりあえず使い方をマスターしておけ
0774デフォルトの名無しさん2008/12/22(月) 22:57:09
>>772
お前の家の住所に意味はないのか?
例えば、「お前の家が見たい」って言われたとして、家ごとコピーして渡さなくても住所教えればいいだろ。そういうことだ。
0775デフォルトの名無しさん2008/12/22(月) 22:57:30
>>773
どう使うのか・・こう・・具体的に説明してくれるとありがたいです・・
0776デフォルトの名無しさん2008/12/22(月) 22:58:01
>>774
そ・・そういうことか!!!!!!!!
0777デフォルトの名無しさん2008/12/22(月) 22:58:52
>>772
なんでかっていうとめんどくさいからググレ
でも必要だから絶対覚えろ

・・・これは流石にひどいか

http://www7b.biglobe.ne.jp/robe/cpphtml/
ここのポインタの部分だけでもみるといいよ
C言語だったとしても内容変わらんから
0778デフォルトの名無しさん2008/12/22(月) 23:23:27
int c;
c=getc();

これで合ってると思うんですが、printf("c=%d", c);で表示すると入力したものじゃなくて変なのが入るんですがなぜですか?
0779デフォルトの名無しさん2008/12/22(月) 23:25:02
>>778
%cだ。
それだと。文字コードが表示される。
0780デフォルトの名無しさん2008/12/23(火) 00:01:22
>>775
100000個の要素を持った配列を渡すとき、「ちょっとこれサイズでかくね?」って思うでしょ
でもポインタ1個渡せば、あとはポインタの位置をずらしていくだけで配列を参照できるの
ねっ簡単でしょ
以上、ヴァンプ将軍のさっと簡単ハッキングでした
0781デフォルトの名無しさん2008/12/23(火) 02:49:18
なんだか聞きたいことがうまくまとめられてないのですが.....
先日Cの入門書を一通り学習し終えたのでwindowsアプリに手を出し始めました
しかしwindowsアプリではCの入門書でいうところの最初に学んだprintfやscanfのようなものが一切出てこず、違うものばかりです
ではそういったCの入門書ででてきてwindowsアプリの入門書では全くでてこない↑等のものはどこで使うのでしょうか?
また、書店にいくとCの関数辞典のようなものがありますがそういった書籍にのっているものも上記のようにwindowsアプリではでてこないものばかりなのでしょうか?
0782デフォルトの名無しさん2008/12/23(火) 02:59:31
上記のようにwindowsアプリではでてこないものばかり
0783デフォルトの名無しさん2008/12/23(火) 03:01:14
cはどのOSでも共通して使える言語。Windows限定の場合は、下地に使うだけ。
0784デフォルトの名無しさん2008/12/23(火) 03:04:27
>>781
Windowsでも一応コンソールアプリがあるけど、ふつーはprintf()とか標準入出力系の
関数は使いません。
それ以外の、ファイル入出力とか、文字種のチェックとか数学系とか時間計とかは使います。
ファイルにロックとかけるとか、ミリ秒単位で時間を扱うとか、ちょっとこった使い方をすると
WindowsのAPIとかを使うことになります。
0785デフォルトの名無しさん2008/12/23(火) 03:09:27
>>782-784
ありがとう、入門書で最初にやったことがいきなり不要扱いだったんで居間まで何やってたんだろう('A`)と少し不安になりました
プログラムを勉強するなら関数辞典は買っておけとよく言われるのですがこの関数辞典とは一般にC/C++のものをさすのでしょうか?
0786デフォルトの名無しさん2008/12/23(火) 03:17:45
>>785
そうだと思うけど、買う必要はないかな?
Cの標準関数の説明なら、ネットで探せばみつかるし。

http://www.bohyoh.com/CandCPP/C/Library/index.html

こういうやつとか。
0787デフォルトの名無しさん2008/12/23(火) 03:23:32
>>786
お気に入りにいれました
しかし結構何のことか全くわからん内容の関数とかあるんだなぁ・・・
0788デフォルトの名無しさん2008/12/23(火) 03:30:22
googleで「manpage fread」とかmanpageをつけてググると、詳細な説明がでてくる。

本を買うならリファレンスより、何とかクックブックとか何とかの技500とかみたいに、短いサンプルが
たくさん乗ってるやつのやつのほうがいいけど、オンラインでそういうやつあるかな?
0789デフォルトの名無しさん2008/12/23(火) 08:59:44
敵が右往左往して巡回するようにしたいのですが、なぜか右端でブルブル高速で震えているだけになっています
どうすればよいのでしょうか
敵の位置を変数「enemyposx」に入れてます

if(enemyposx<79.0)
{
enemyposx+=0.8;
}
if(enemyposx>113.0)
{
enemyposx-=0.8;
}
else
{
enemyposx+=0.8;
}
0790デフォルトの名無しさん2008/12/23(火) 09:09:51
113.1 -(2つ目のブロック)-> 112.3 -(3つ目のブロック)-> 113.1 -(2つ目のブロック)-> 112.3 -> ...
0791デフォルトの名無しさん2008/12/23(火) 10:00:28
普通は x座標とは別に、進行方向を示す変数を持つもんだよ

if( x < 79 ) diff = +0.8 ;
if( x > 113 ) diff = -0.8;
x += diff;
0792デフォルトの名無しさん2008/12/23(火) 10:17:59
>>780
> ねっ簡単でしょ

ボブ! ボブじゃないか!
0793デフォルトの名無しさん2008/12/23(火) 11:38:56
>>791
できました。ありがとうございました
0794デフォルトの名無しさん2008/12/23(火) 12:01:20
自分も最初はポインタの概念がよく分からなかったなw

でも解析とか始めるようになってデバッガーとか使い出してからやっと理解できたわ
07957692008/12/23(火) 15:13:54
>>771
CLRオプションでコンパイルできないと言われましたがどうすればいいでしょうか?
0796デフォルトの名無しさん2008/12/23(火) 16:10:58
どこで聞くのが適切なのかよく分からなかったのでここで質問致します。
以下をご存じの方がいらっしゃいましたら、ご教授頂けましたらありがたいです。

環境はcygwin + g++です。将来的に linux でも使いたいと思っています。
異なる2台のHDDに各々数10GBのデータが入っています。
両方の HDD から、一度に512MB 程度づつ、データをメモリに読み込み、
逐次比較をしていくようなプログラムを作っているます。

HDD1台ごとに、一つのスレッドを作成し、スレッド内で HDD->メモリの
DMA 転送を行いつつ、dual buffer 構成にして別のスレッドで比較をしようと考えています。

HDD からメモリへDMA 転送をさせる方法を知りたいのですが、
普通に fread 文で読み込めば、勝手にDMA転送をしてくれるものなのでしょうか?
0797デフォルトの名無しさん2008/12/23(火) 16:16:33
>>795
プロジェクト作る時はCLRじゃなくてWin32のほうで
0798デフォルトの名無しさん2008/12/23(火) 16:39:58
>>796
DMA するかどうかはプログラミングの外の話じゃないかな。
それとメモリに読み込むより mmap した方が良いんじゃね?
0799デフォルトの名無しさん2008/12/23(火) 18:15:48
Cで
int a[n][2]という配列を作りたいのですが、

int **a;
a = (int *)malloc(n * sizeof(int *));
for(i = 0; i < n; i++){
 a[i] = (int *)malloc(2 * sizeof(int));
}

でいいのでしょうか?
0800デフォルトの名無しさん2008/12/23(火) 18:20:56
二つ目が決まってるなら
int (*a)[2]で確保一回で済ますというのもあるな
0801デフォルトの名無しさん2008/12/23(火) 18:46:49
レスありがとうございます。

int (*a)[3];
a = (int *)malloc(n * sizeof(*a));

これでいいのでしょうか?
0802デフォルトの名無しさん2008/12/23(火) 18:50:10
>794
Javaのほうが先にやってた俺は「参照が具体的な数値になったようなもんか」と考えたっけな
0803デフォルトの名無しさん2008/12/23(火) 20:15:59
ポインタはすんなり理解できたから、なんで理解できないのか、理解できない。
0804デフォルトの名無しさん2008/12/23(火) 21:11:49
なぜか昔からポインタで詰まる人が多いんだよね
ある程度コンピュータを知ってれば、アドレスのことでしょ?って思って
正確ではないにしろ、理解に詰まることはないんだけどね

Javaの参照とポインタは言葉通り、ちょっとニュアンスが違う。
そのあたりが"ポインタ"で詰まる理由のひとつかもね

0805デフォルトの名無しさん2008/12/23(火) 21:52:39
>>801
int (*a)[3];
a = (int (*)[3])malloc(sizeof(int [3]) * n);
だな
0806デフォルトの名無しさん2008/12/23(火) 22:20:22
visual C++2008 ......を使ってるんですが・・
プロジェクトの消去する方法がわかりません
ヘルプとかで、いろいろ探したりもしてみたんですが、わかりませんでした
どなたか、教えてください
0807デフォルトの名無しさん2008/12/23(火) 22:36:04
>>806
ソリューションエクスプローラーで右クリックしてメニューで削除を選ぶと削除される。
0808デフォルトの名無しさん2008/12/23(火) 22:39:07
おぉ、サンクス!
でも、消えない・・
0809デフォルトの名無しさん2008/12/23(火) 22:39:53
>>805
ありがとうございました。
0810デフォルトの名無しさん2008/12/23(火) 23:12:55
>>799
も間違ってるよな
0811デフォルトの名無しさん2008/12/24(水) 10:02:22
Visual C++を使っています。
http://www.asahi-net.or.jp/~yf8k-kbys/newcpp2.htmlのサイトにある、

//hello.cpp
#include <iostream>
using namespace std;

int main()
{
cout << "hello" << endl;
}

をコンパイルしたのですが、
MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\test\Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。
とエラーが表示されコンパイルできません。

こんな初歩的な質問ですみませんが、どうすればコンパイルできますか?
またエラーの意味も出来れば教えてください。
0812デフォルトの名無しさん2008/12/24(水) 10:16:38
エラーの意味:
  「Windows アプリケーションだっていうから
   WinMain() を呼び出そうとしたら
   そんな関数なかった」
解決法:
  コンソールアプリケーションとしてプロジェクト作り直す。
0813デフォルトの名無しさん2008/12/24(水) 10:24:37
>>812
解決法とエラーの意味ありがとうございます!
無事コンパイルできました。

ここで疑問ですが、
win32コンソールアプリケーションとwin32プロジェクトの違いはなんなのでしょうか?
よければ教えていただきたいです。
0814デフォルトの名無しさん2008/12/24(水) 10:27:10
Windowsアプリケーションにはメッセージループがあるだろ
0815デフォルトの名無しさん2008/12/24(水) 10:28:55
>>814
返答ありがとうございます
0816デフォルトの名無しさん2008/12/24(水) 10:34:27
>>813
win32プロジェクトはイベント割り込みを考慮して作る
たとえば「ウィンドウを再描画してくれ」といってきたりする(以下、イベント)
このようなイベントが起きたときにどう処理するかをプログラムしていく
だが、コンソールにはイベントがない
0817デフォルトの名無しさん2008/12/24(水) 10:35:56
ここではイベントじゃなくメッセージというべきだったか
0818デフォルトの名無しさん2008/12/24(水) 10:41:08
>>816
なるほど、大まかに理解することが出来ました。
つまりは、イベントを考慮する場合はwin32プロジェクトで作れということですね
返答ありがとうございました
0819デフォルトの名無しさん2008/12/24(水) 11:00:20
>>811の者です。度々失礼します。
現在http://www.asahi-net.or.jp/~yf8k-kbys/newcpp3.htmlのプログラム

//hello2.cpp
#include <iostream>
#include <string>
using namespace std;

int main()
{
string name;
cout << "こんにちは。私はコンピュータです。" <<endl;
cout << "あなたの名前を入力してください。" <<endl;
cin >> name;
cout<<name<<"さん。よろしく。"<<endl;
}

をコンパイルし、
画面を表示し、入力することにも一応成功しているのですが、
名前「小林」を入力し、エンターを押すと同時に「小林さん。よろしく」の表示を見るまもなく、
表示されると同時にウインドウが消えてしまいます。
これは正常な動作でしょうか?
0820デフォルトの名無しさん2008/12/24(水) 11:10:59
終端まで実行すると即座に終了する
正常ですよ
0821デフォルトの名無しさん2008/12/24(水) 11:12:22
>>820
正常でしたか。安心しました。
回答ありがとうございます
0822デフォルトの名無しさん2008/12/24(水) 11:13:34
はい。あなたの反応速度が遅いだけです。

ところで、int main()と宣言しておきながらintを返さないサンプルを掲示しているような
ヘッポコサイトは参考にしない方がいいです。
0823デフォルトの名無しさん2008/12/24(水) 11:31:43
C99以降は (C++も?) main の終了後は 0 を戻すが
それ以前だと未定義だっけ?

>>819
デバッグなしで実行 (Ctrl+F5) すると
終了時に一時停止する。

>>822
>あなたの反応速度が遅いだけ
イミフ
0824デフォルトの名無しさん2008/12/24(水) 11:34:32
>>823
>>デバッグなしで実行 (Ctrl+F5) すると 終了時に一時停止する。
確かに一時停止しました!!参考になります
0825デフォルトの名無しさん2008/12/24(水) 18:06:50
質問です。
VC6.0時代は
for(int i = 0; i < 10; ++i)
{
//いろいろ
}
printf("%d", i);

とすることができましたが、VC9.0ではprintfのところではすでにiが無効になってしまいますよね。
これって、C/C++が昔からこだわっていた「互換性を保つ」に反している気がするのですが、どうなのでしょうか?

VC6.0時代の解釈がC++の言語仕様上間違っていたので、直したとかなんでしょうか?
0826デフォルトの名無しさん2008/12/24(水) 18:11:18
>>825
VC6時代にはまだ正式な規格じゃなかったから。
.NET(2002)から対応したが、デフォルトではVC6互換だった。
2005からデフォルトがISO準拠になったが、プロジェクトのプロパティのC/C++ 言語の
for ループ スコープの強制準拠をいいえにすれば同じ動作になる。
0827デフォルトの名無しさん2008/12/24(水) 18:14:45
>>825
C++の最初の定義ではVC6.0の仕様だった。
その後変更になった。
0828デフォルトの名無しさん2008/12/24(水) 18:54:22
>>826-827
ありがとうございます。
良くわかりました
0829デフォルトの名無しさん2008/12/24(水) 19:40:45
C言語で以下の用なプログラムを見ました。
このようなプログラムの記述でもよい?というかどういう意味なのでしょうか?
よろしくお願い致します。

1.
(kata)自作関数()
戻りの型を”()で閉じてる”上に関数との間に”スペース”がありません。
ちなみにkataには、変数でvoidが入ります。後半の()はvoid型なのに。

2.
rrom.abc[0].ddd[0]
ピリオドが二つあるのですが、これは一体何を意味しているのでしょうか?
構造体かと思いましたが、そのあとにまたピリオドがあって、構造体の構造体?

3.
struct destr s_ssss;
struct destr aaaa;

void aa_a;
void aa_b;
char dd_d;

といった文があったのですが、1行目でstructを宣言しておきながら;してる意味は?
そのあとにもまた;で終了して、次の行からは構造体の中身ともおわれしき代入があります。
{}で閉じる必要はないのでしょうか?
0830デフォルトの名無しさん2008/12/24(水) 19:58:03
>>829
中途半端な知識で中途半端に引用しているから、説明してもいいけど余計に混乱すると思う。
丸ごとアップローダにあげた方がいいと思う。

一応簡単に。
1.
・記号の前後のスペースなんか気にするな。殆どの場合に省略可能だ。
・「変数でvoidが入る」なんてことはない。何か勘違いをしている。

2.
・rromという構造体の実態の、メンバabcと言う構造体配列の0番目の要素のメンバdddという配列なのだろう。

3.
・1行目のそれは、そういう構造体があると言う只の宣言だ。
・3行目以降は構造体の中身ではない。引用が不充分なので、それが何かはわからない。
0831デフォルトの名無しさん2008/12/24(水) 21:34:22
>>830
ありがとうございます。

1.に関してということは
voidJISAKUkANSU() でもvoid JISAKUKANSU でもよいということでしょうか?

ちなみにkataは、別のヘッダファイルで void kata; なっていたのでvoidかとおもっていました。

2.
struct rrom{
abc[10]
}
strcut abc{
ddd[10]
} とかいった感じではなく

struct rrom{
abc[10]
}
abc[0] = nanka

とかいった感じなのでしょうか?この場合でも一番上が構造体だから.をつけると
理解すればよいのかな?

3.
3行目以降は本当に何行か構造体の中身みたいな感じで書かれていました。
なんでこんな書き方してるんだろうとおもってました。他の所でこの構造体
つかってた感じだったので、;をつけて下に何故かいているんだろうって
0832デフォルトの名無しさん2008/12/24(水) 21:46:03
>struct rrom{
>abc[10]
>}
>strcut abc{
>ddd[10]
>} とかいった感じではなく
>
>struct rrom{
>abc[10]
>}
>abc[0] = nanka
>
>とかいった感じなのでしょうか?

違う。
struct ddd_t {
/* 何か */
};

struct abt_t {
struct ddd_t ddd[10];
};

struct rrom_t {
struct abc_t abc[10];
};

rrom_t rrom;

rrom.abc[0].ddd[0]
みたいなかんじだと思われ。型と変数を混同しないように。
0833デフォルトの名無しさん2008/12/24(水) 22:12:19
ある構造体fooを一行でunsigned char[40]に型キャストするのは不可能でしょうか。。。
struct Foo{
(sizeofが40になる単純なデータ群)
}
をboost::serializeで使うのにいちいちserialize書くのかったるいのですorz
■ このスレッドは過去ログ倉庫に格納されています