【初心者歓迎】C/C++室 Ver.54【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/05/14(水) 01:00:02ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.53【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1208989385/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0605デフォルトの名無しさん
2008/06/03(火) 00:12:430606デフォルトの名無しさん
2008/06/03(火) 00:15:050607デフォルトの名無しさん
2008/06/03(火) 00:18:15自分でindent叩くとかindent-regionするとかさー
0608デフォルトの名無しさん
2008/06/03(火) 00:25:150609デフォルトの名無しさん
2008/06/03(火) 00:39:27試したところ 3 分弱。結構かかるねー。
0610デフォルトの名無しさん
2008/06/03(火) 00:44:13ifstreamなんて糞みたいに遅いから、わざわざC++使ってもちっとも速くならないと
思う
0611デフォルトの名無しさん
2008/06/03(火) 00:47:12#include <stdlib.h>
void hyouji(int x);
main()
{
int i,x;
char hikisu[];
printf("数値を入力してください(1-52):");
scanf("%d",&x);
hyouji(x);
for (i=1; i <= x; i++){
printf("%d %c",i,hikisu[i]);
}
}
void hyouji(int x)
{
FILE fp;
int i;
if(NULL == (fp = fopen("homework.txt","r"))){
printf("ファイルが開けません\n");
exit(1);
}
for (i=1; i <= x; i++){
fscanf(fp, "%c", &hikisu[i]);
}
fclose(fp);
return;
}
以上のプログラムで『LightC』を使ってコンパイルしようとしても上手くいきません。
どの辺りが間違っているのでしょうか?
『LightC』
ttp://www.tamasoft.co.jp/lc/index.html
0612デフォルトの名無しさん
2008/06/03(火) 00:48:03少なくともVC6の頃は鼻血出そうなくらい遅かった。
0613デフォルトの名無しさん
2008/06/03(火) 00:50:590614デフォルトの名無しさん
2008/06/03(火) 01:06:23#include <stdlib.h>
void hyouji(int x);
main() ←戻り値の型指定が無い
{
int i,x;
char hikisu[]; ←サイズが決まってない
printf("数値を入力してください(1-52):");
scanf("%d",&x);
hyouji(x);
for (i=1; i <= x; i++){
printf("%d %c",i,hikisu[i]);
}
}
void hyouji(int x)
{
FILE fp; ←普通ファイルポインタを使うので*fp
int i;
if(NULL == (fp = fopen("homework.txt","r"))){
printf("ファイルが開けません\n");
exit(1);
}
for (i=1; i <= x; i++){
fscanf(fp, "%c", &hikisu[i]); ←hikisuなどと言うものはこの関数内に存在しない
}
fclose(fp);
return;
}
ぱっと見た感じこんなもの
0615デフォルトの名無しさん
2008/06/03(火) 01:07:37vimで
ggVG=
とやればよいよ。VSなら}を書き直したらそれでやってくれなかったっけ?
0616デフォルトの名無しさん
2008/06/03(火) 01:12:31基礎から学べ
0617デフォルトの名無しさん
2008/06/03(火) 01:28:45わざわざそれだけのためにエディタ起動させるのか。
0618611
2008/06/03(火) 01:31:43test.c(7): エラー C.2530: 変数 hikisu のサイズが不明です
test.c(5): 警告 C.5280: 関数 main に return 文がありません
test.c(19): エラー C.2920: struct _FILE/* を struct _FILE に変換することはできません
test.c(24): エラー C.2130: 識別子 hikisu が未定義です
test.c(26): エラー C.2920: struct _FILE を struct _FILE/* に変換することはできません
0619デフォルトの名無しさん
2008/06/03(火) 02:13:20だってビルドエラーとか、半端なソースの場合とか、動かす前に
見なきゃじゃん。
エディタ起動すらめんどくさがるとかどうやってソース書いてんの?
0620611
2008/06/03(火) 02:16:05#include <stdio.h>
#include <stdlib.h>
void hyouji(int x);
char main(char hikisu[])
{
int i,x;
printf("数値を入力してください(1-52):");
scanf("%d",&x);
hyouji(x);
for (i=1; i <= x; i++){printf("%d %c",i,hikisu[i]);}
}
void hyouji(int x,)
{
FILE *fp;
int i;
char hikisu[52];
if(NULL == (fp = fopen("homework.txt","r"))){
printf("ファイルが開けません\n");
exit(1);
}
for (i=1; i <= x; i++){fscanf(fp, "%c", &hikisu[i]);}
fclose(fp);
return;
}
しかし、それでも以下のようなエラー文が出ます。
test.c(4): 警告 C.5280: 関数 main に return 文がありません
test.c(19): エラー C.2150: == 演算子の引数が正しくありません
一体どこにエラーがあるのでしょうか・・・
0621デフォルトの名無しさん
2008/06/03(火) 02:44:28void f(int **p){
int x[2]={1,2};
*p=x;
}
int main(void){
int *p;
f(&p);
printf("%d\n",p[0]+p[1]);
return 0;
}
上のプログラムの誤りを指摘せよという問題が出たのですが、
どこが間違っているのかよくわからないので教えてください。
おそらくp[0],p[1]のあたりが違うのだと思うんですが・・・
0622デフォルトの名無しさん
2008/06/03(火) 02:46:40>char main(char hikisu[])
ただ付ければ良いって物でもないだろ。
一度「ちゃんとした」入門書を買ってきて勉強したほうがいい。
>test.c(4): 警告 C.5280: 関数 main に return 文がありません
「return文がない」と言われているのだから、どこかにreturn文を追加すれば
いいのではないか、というくらいは想像つかないか?
0623デフォルトの名無しさん
2008/06/03(火) 02:48:37※1
char main(char hikisu[])
↓
int main(int argc, char** argv)
※2
printf("%d %c",i,hikisu[i]);のhikisuが不明
※3
main関数の最後にreturn 0;を付ける
※4
void hyoujiと関数の戻り値がvoidになっている。
戻り値を使わないのなら、最後のreturn;は必要ないです。
※5
void hyouji(int x,)
↓
void hyouji(int x)
0624デフォルトの名無しさん
2008/06/03(火) 02:49:14つ ヒント「ローカル変数の寿命」
0625623
2008/06/03(火) 03:12:28※2
printf("%d %c",i,hikisu[i]);のhikisuが不明
と書いたけど、mainの引数を使いたいっぽいのですよね。
mainの引数を使うなら、
argcの方に引数の数が入ってるから、その数を参考にしてその数をオーバーする事のないようにして、
printf("%s", argv[i]);
これみたいに表示かな。
06261/2
2008/06/03(火) 03:20:56#include <stdlib.h>
void hyouji(char*, size_t);
int main()
{
char *hikisu;
size_t size;
while(1){
printf("数値を入力してください(1-52):");
scanf("%d", &size);
if(size > 0 && size < 53) break;
else printf("サイズを超えています\n");
}
hikisu = (char*)malloc(size * sizeof(char));
if(NULL == hikisu){
printf("メモリが確保出来ません\n");
exit(1);
}
hyouji(hikisu, size);
free(hikisu);
return 0;
}
06272/2
2008/06/03(火) 03:21:17{
FILE *fp;
int i;
if(NULL == (fp = fopen("homework.txt","r"))){
printf("ファイルが開けません\n");
exit(1);
}
for(i=0; i < size; ++i){
fscanf(fp, " %c", &hikisu[i]);
printf("%2d: %c\n", i+1, hikisu[i]);
}
fclose(fp);
}
やりたいんだろうなと言う事を考えたらこんな感じになるかな
homework.txtの中身を知らないからその辺は変わるかも知れないけど
0628デフォルトの名無しさん
2008/06/03(火) 04:17:380629611
2008/06/03(火) 09:19:09ありがとうございます、そして本当にご迷惑をおかけしました・・・
>>614-627とテキストを見直してもう一度自分で考えてみようと思います。
0630デフォルトの名無しさん
2008/06/03(火) 16:57:39using namespace std;
int main(void)
{ cout << "Hello" << endl; }
上記のソースをコンパイルして、 c:\>hello.exe > hello.txt
のように実行すれば、テキストファイルができるのですが、
出力させたいのがテキストではなく、バイナリデータの時はどうすれば良いのでしょうか?
cout << binary_data;
とすると、意図しないデータが出力されてしまいます。
どうすればバイナリデータを変換させないでそのまま出力させることができるのでしょうか?
どなたか、優しい方いましたら教えて下さい。
携帯から書き込んでいるので、見にくかったらすみません。
0631デフォルトの名無しさん
2008/06/03(火) 17:45:51バイナリモードにすればよろしかろ。
0632デフォルトの名無しさん
2008/06/03(火) 17:48:55その、バイナリモードってやつにはどうすればできるのでしょうか?
0633デフォルトの名無しさん
2008/06/03(火) 17:53:18cout バイナリとかでググればいいんじゃね?
0634デフォルトの名無しさん
2008/06/03(火) 17:55:32Windowsだよね。__setmode(__fileno(stdout), _O_BINARY)でOK。
0635デフォルトの名無しさん
2008/06/03(火) 18:05:47char*にキャストしてwrite()とかするんだね
0636デフォルトの名無しさん
2008/06/03(火) 18:15:310637デフォルトの名無しさん
2008/06/03(火) 21:32:59俺なんかおかしいこと言った?
バイナリ出力ならエンコード変換も書式フォーマットも改行制御も要らない
つまりiostreamは完全に余計な邪魔者でしかない
ostream::write()がマシだと思うが
streambufを使う方がマシで、
本当はiostreamなんて使わないのが一番いい
0638デフォルトの名無しさん
2008/06/03(火) 22:05:430639デフォルトの名無しさん
2008/06/03(火) 22:33:51fwrite()一発で済む仕事でなぜわざわざそんなことをやる
明らかに遅く、特に得るものがあるとも思えない
0640デフォルトの名無しさん
2008/06/03(火) 22:36:30実際の出力との対応を分かりやすくできて、メリットだと思うけどね。
0641デフォルトの名無しさん
2008/06/03(火) 22:40:1332bit整数をバイナリ出力するときとか、Cならアドレス取って4byte書き出す
わけじゃん
iostreamの作法ではどうするの?
0642デフォルトの名無しさん
2008/06/03(火) 23:13:280643デフォルトの名無しさん
2008/06/03(火) 23:15:39意味が分からない
バイナリビューワなら、出力は「テキスト」じゃないか
>>630は「バイナリデータを出力したい」と言ってるんだぞ
質問者の意図を理解してなかったの?
0644630
2008/06/04(水) 00:00:25あれから、色々頑張ってみたのですが、なにぶん初心者な者で、かなりてこずりました。
最終的には _setmode でなんとかできました。
fwrite で書き出したファイルとも一致するので、とりあえずはこれで良しとします。
色々と教えて下さった皆さん、どうもありがとうございました。
0645デフォルトの名無しさん
2008/06/04(水) 00:04:53分かってると思うけどC++でもfwrite()は普通に使っていいんだよ
0646デフォルトの名無しさん
2008/06/04(水) 00:30:570647デフォルトの名無しさん
2008/06/04(水) 00:46:23参考までに聞くけど、fwrite()の替わりに何使ってるの?
fwrite()なら
int a = 0xdeadbeaf;
fwrite(&a, sizeof a, 1, fp);
で済むけど
ostream::write()やstreambuf::sputn()はキャストしなきゃいけないから
stream.write(reinterpret_cast<char*>(&a), sizeof a);
とかになるよね
コードは長い、汚い、その上遅い
0648デフォルトの名無しさん
2008/06/04(水) 00:55:240649デフォルトの名無しさん
2008/06/04(水) 00:59:260650デフォルトの名無しさん
2008/06/04(水) 01:11:14必要ならFILEポインタからstreamオブジェクトに
キャストできるし、f系の方が便利よね。
0651デフォルトの名無しさん
2008/06/04(水) 01:12:010652デフォルトの名無しさん
2008/06/04(水) 09:44:440653デフォルトの名無しさん
2008/06/04(水) 09:51:42if ( MAX - 値 < 変数)
変数+値はオーバーフローしちゃうよヽ(゚∀゚)ノ
0654デフォルトの名無しさん
2008/06/04(水) 14:57:290655デフォルトの名無しさん
2008/06/04(水) 17:37:470656デフォルトの名無しさん
2008/06/04(水) 19:20:07警告レベル最高だと、未初期化の変数が使用される可能性がある場合に
ビルド時に警告が出力されますが
構造体変数の初期化方法に困っています
使用直前で変数宣言すべきか、構造体1つ1つに初期値をセットすべきか
他に何かスマートな方法があるのでしょうか、
よろしくお願い致します。
0657566
2008/06/04(水) 19:57:17仕様変更などもともなって、long型のデータ7個とdouble型のデータ4個をVBA側に返すことになりました。
が、これらのデータをどうやってVBA側に渡せばよいのかわかりません。
なお、処理はCのライブラリのみ使用してC++ MFCのライブラリ等はほとんど使用しておりません。
あともう少しなのでアドバイスお願いします。
0658566
2008/06/04(水) 20:00:59・VBAの処理をC++で書き直してDLL化。
・VBAからDLLの関数を呼ぶ。
・DLLの関数から結果をVBAで受ける。
・VBAでグラフやレポートを出力する。
こんなことする理由:データ量が多いので処理が遅いため。
でございます。
0659566
2008/06/04(水) 20:05:580660デフォルトの名無しさん
2008/06/04(水) 20:35:361文字ずつ扱えるようにしたいのですが、
入力する文字列を保存する変数には最初に、
char c[256];
のようにメモリを確保しないとバッファオーバーフローがおき、
問題がありますよね?
メモリの動的確保の目的が、メモリの効率的な利用なのはわかりますが、
この入力する文字列のメモリ確保の無駄は、
オーバーフローを防ぐためには仕方がないのでしょうか?
また、メモリ確保の無駄を無くすために、宣言時に
char c;
として、故意にバッファオーバーフローを起こさせるのは、
やはりプログラム的にはNGですよね?
よろしくお願いします。
0661デフォルトの名無しさん
2008/06/04(水) 20:36:20全部 0 で良ければこんな感じでどう?
struct foo = {};
0662デフォルトの名無しさん
2008/06/04(水) 20:39:55日本語でおk
0663デフォルトの名無しさん
2008/06/04(水) 20:43:06ストリームからは一文字づつ取得すればいいいだろ
0664デフォルトの名無しさん
2008/06/04(水) 20:45:08それはダメだ。{}の中には最低一つの式がないといけない。
0665デフォルトの名無しさん
2008/06/04(水) 20:49:51レスありがとうございます
オール0になってて使えそうです
0666デフォルトの名無しさん
2008/06/04(水) 20:52:59そもそもその処理は頻繁に行う必要があり、短時間で処理を終える
必要があるの?
0667デフォルトの名無しさん
2008/06/04(水) 20:59:5710Kバイトくらいをバッファとして用意していて、入力が数バイトしかなければ
残りの9Kバイトくらいは無駄になりますね。
けれど、実際の環境において、9Kバイト余分に使用したからといって
破綻するような精一杯な状態って、あまりないですよね。
富豪的プログラミングというか、そういう発想でいいと思いますよ。
どうしても無駄にallocしたくない、って言うのであれば一文字ずつ取得して、
都度reallocすればいいと思いますが。。
0668660
2008/06/04(水) 21:16:55レスありがとうございます。
プロバイダ規制中のため、携帯でちまちま打ってたら反応が遅くなってしまいました。
打ってる最中でしたが、望んでいた答えが>>667さんから得られたので、
ここは、富豪的プログラミングということで手を打ちたいと思います。
ありがとうございました。
0669デフォルトの名無しさん
2008/06/04(水) 21:32:370670デフォルトの名無しさん
2008/06/04(水) 21:37:47VBAから呼ばれる関数の引数で返せばいい。
配列(ポインタ)引数で、要素に書き込んでおけば、VBA側にも反映される。
0671デフォルトの名無しさん
2008/06/04(水) 21:55:140672デフォルトの名無しさん
2008/06/04(水) 21:57:14読み込んだ量
0673デフォルトの名無しさん
2008/06/04(水) 21:59:100674デフォルトの名無しさん
2008/06/04(水) 22:01:58量の単位は何ですか?
0675デフォルトの名無しさん
2008/06/04(水) 22:14:570676デフォルトの名無しさん
2008/06/04(水) 22:18:550677デフォルトの名無しさん
2008/06/04(水) 22:19:290678デフォルトの名無しさん
2008/06/04(水) 22:21:320679デフォルトの名無しさん
2008/06/04(水) 22:23:020680デフォルトの名無しさん
2008/06/04(水) 22:38:39ん?
0681デフォルトの名無しさん
2008/06/04(水) 23:13:18Cのエディタって何使ってます?
今までVS使ってたんですけど、マイコン用のに使うのには向かなくて…
テキストエディタでオススメの教えていただけませんか?
個人的に、ヘッダファイル読んで構造体や関数の補完入力、表示の機能があるといいですね。
0682デフォルトの名無しさん
2008/06/04(水) 23:16:52個人的にはvimなんだけど、sakuraとかemacsとかEclipseもいいんでないの?
0683デフォルトの名無しさん
2008/06/04(水) 23:17:45つってもVS見たいなポップアップではないが
0684デフォルトの名無しさん
2008/06/04(水) 23:36:22宿題スレから。realloc() を使います。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFSIZE 3 /* >= 2 */
char *getline(void) {
static char inbuff[BUFFSIZE];
char *outbuff_malloc, *tmpbuff, *p;
int fEOL;
if ((outbuff_malloc = malloc(1)) == NULL)
return NULL;
*outbuff_malloc = '\0';
fEOL = 0;
do {
if (fgets(inbuff, BUFFSIZE, stdin) == NULL) break;
for (p = inbuff; *p != '\0'; p++);
if (*(p - 1) == '\n') { *(p - 1) = '\0'; fEOL = 1; }
if ((tmpbuff = realloc(outbuff_malloc, strlen(outbuff_malloc) + strlen(inbuff) + 1)) ==NULL) { free(outbuff_malloc); return NULL; }
strcat(tmpbuff, inbuff);
outbuff_malloc = tmpbuff;
} while (!fEOL);
return outbuff_malloc;
}
int main()
{
char *inputLine_malloc;
if ((inputLine_malloc = getline()) != NULL) { printf(">>%s\n", inputLine_malloc); } else { printf("getline: cannot alloc memory.\n"); }
free(inputLine_malloc); /* NULL ok */
return 0;
}
/* end */
0685デフォルトの名無しさん
2008/06/04(水) 23:56:36ありがとうございます!
試してみます
0686C++で質問です
2008/06/05(木) 00:14:03#include <string>
#include <cstddef>
// T 型オブジェクト e 個分の領域を確保し、値 t で埋める
template< class T >
void foo( const int e, const T& t )
{
using namespace std;
allocator< T > alloc;
T *begin, *end, *iter;
// 領域の確保
begin = alloc.allocate( e );
end = begin + e;
uninitialized_fill( begin, end, t );
// 何らかの処理
// 領域の開放
iter = end;
while( iter != begin )
{
alloc.destroy( --iter ); // オブジェクトを後方から順に破棄
}
alloc.deallocate( begin, end - begin ); // 確保した領域を破棄
}
上記のような関数で、領域開放の際、 deallocate の前に
各要素に対して destroy を実行するのが通例ですが、
これを行う意味ってなんでしょう? 実行しない場合、何が起こると考えられますか?
0687デフォルトの名無しさん
2008/06/05(木) 00:24:410688686
2008/06/05(木) 00:32:49なるほど。
型 T がポインタやクラス(特に自らリソースを確保するクラス)であったような時
メモリリークを引き起こす可能性があるわけですね。
一方、型 T が int や double であった場合には
オブジェクトが使っているメモリ領域は
まさに deallocate で削除される領域なので問題はおきない
と考えてよろしいでしょうか?
0689デフォルトの名無しさん
2008/06/05(木) 01:15:19テンプレートを使わない場合でもコードが入り組んでくると
ほにゃらら_tみたいな、実態が組み込み型なんだかクラスなんだか
後で組み込み型からクラスに変更されるかも知れないような怪しいtypedefが出てくるので、
POD型の時にはデストラクタを呼ばないようなテンプレートを書いておいて
call_destructors<T>(begin, end);
みたいな感じで必ず記述しておいたほうが良いと思うけど。
0690デフォルトの名無しさん
2008/06/05(木) 01:23:050691デフォルトの名無しさん
2008/06/05(木) 01:29:260693デフォルトの名無しさん
2008/06/05(木) 12:44:52VC++2008EEで独自のダイアログを表示するクラスを作ったのですが、メンバ関数からDialogBox()する時に同じメンバ関数のダイアログプロシージャを呼ぶ方法が良く分りません。
DialogBox(g_hInst, MAKEINTRESOURCE(IDD_DIALOG1), g_hWnd, hoge::MsgBox);
↓
error C3867: 'hoge::MsgBox: 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&hoge::MsgBox' を使用してください
その通り書き換えてもキャスト出来ない旨のエラーが出ますし、ヘルプの凡例には該当するものがなくて対処出来ません。
クラスを使わなければ表示出来るのですが、何が原因でしょうか。
0694デフォルトの名無しさん
2008/06/05(木) 12:47:310695デフォルトの名無しさん
2008/06/05(木) 12:55:44MsgBoxが非staticメンバ関数であることが原因
非staticメンバ関数にはthisポインタという隠れた引数があるので普通の関数と同等には扱えない
そういう場合には普通の関数かstaticメンバ関数を渡しておき、
何かのトリックを使ってどこかからthisポインタを取り出し、それを使ってメンバ関数を呼ぶ
0696デフォルトの名無しさん
2008/06/05(木) 13:36:08回答ありがとうございます。
処理が複雑になりそうなので(普通の関数とローカル変数を使えば出来そうな気もしますが)、現状ではダイアログプロシージャをクラスに含めない事にしました。
本当にありがとうございました。
0697デフォルトの名無しさん
2008/06/05(木) 16:16:26あー__is_podか。
大分前にispodって書いてる人がいて、それで検索してたんだけど、
どうりで見つからなかったわけだ。
0698デフォルトの名無しさん
2008/06/05(木) 16:20:480699デフォルトの名無しさん
2008/06/05(木) 16:36:34yacc/lex
0700デフォルトの名無しさん
2008/06/05(木) 20:26:23> POD型の時にはデストラクタを呼ばないような
それ、まさにallocatorのdestroy。
正確に言うとx.~T()の構文はPODでもエラーにならず、何の効果も起きないだけ。
ちなみに、こんなコードも合法のはず。
int main()
{
typedef int t;
t i;
i.~t();
}
0701デフォルトの名無しさん
2008/06/06(金) 14:37:58やり方が分かりません。
アプリケーションのアイコンをタスクトレイに表示させた後、そのアイコン上に
マウスを移動させた場合に指定したメッセージを表示させる事は出来ます。
これを、マウスをアイコン上に移動させなくてもイベントが発生した際に
バルーンを表示させるようにしたいのですが・・・。
NIM_SETFOCUSを使えば似た事が可能なのですが、NIM_SETFOCUSを利用すると
ウィンドウのフォーカスがアイコンに持っていかれてしまうので不便です。
別のやり方は無いでしょうか?
伝えにくいので以下に現状のプログラムを示します。
NOTIFYICONDATA g_nid;
case WM_CREATE:
ZeroMemory ( &g_nid, sizeof( NOTIFYICONDATA ));
sprintf( g_nid.szTip, "TESTメッセージです" );
g_nid.cbSize = sizeof( NOTIFYICONDATA );
g_nid.hWnd = hWnd;
g_nid.uID = TRAY_ID;
g_nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
g_nid.uCallbackMessage = MYWM_NOTIFYICON;
Shell_NotifyIcon( NIM_ADD, &g_nid );
break;
case WM_MYEVENT://任意のタイミングでメッセージを表示
Shell_NotifyIcon( NIM_SETFOCUS , &g_nid );//フォーカスを割り当てる、これで一応バルーンは表示される
break;
0702デフォルトの名無しさん
2008/06/06(金) 20:35:140703デフォルトの名無しさん
2008/06/07(土) 08:07:02以下のプログラムで構造体を初期化するには
どう記述すればいいでしょうか。
括弧のつけ方をいろいろ変えているんですけど、
初期化の一部だけに括弧が付いているとか、
宣言構文エラーとか出てうまくいきません。
typedef struct {
int a;
int b;
}FOO_STRUCT;
typedef struct {
FOO_STRUCT foo[2];
}HOGE_STRUCT;
int main(void)
{
HOGE_STRUCT hoge = {{0, 1}, {2, 3}};
return 0;
}
0704デフォルトの名無しさん
2008/06/07(土) 08:32:03HOGE_STRUCT hoge = {{{0, 1}, {2, 3}}};
■ このスレッドは過去ログ倉庫に格納されています