[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 08/03 08:01 / Filesize : 138 KB / Number-of Response : 658
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門編)Part 100



1 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/30(金) 21:01:32.89 ]
C言語の入門者向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 99
toro.2ch.net/test/read.cgi/tech/1331786500/
★過去スレ
makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 156代目
toro.2ch.net/test/read.cgi/tech/1328276597/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
codepad.org/

511 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 01:07:33.10 ]
そういえばバカバカ言うツンデレはたくさんいるけど
アホアホ言うツンデレって見たこと無いな・・・
大阪系のツンデレになるのかな

512 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 01:09:55.58 ]
>>511
初代いいんちょの名をほしいままにする東鳩のいいんちょを忘れるとは

513 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 18:21:24.30 ]
>>511
うん


514 名前:デフォルトの名無しさん [2012/04/16(月) 18:23:11.91 ]
アセンプリでpushって命令あるけど、あれどういう意味?
moveは移動ってわかるんだけど、pushも似たようなんじゃないのですか?
調べてもスタックがどうたらよくわからない。

515 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 18:26:42.00 ]
>>514
なにもかも分かってない

516 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 18:27:13.17 ]
牧草を筒の中に入れて固めていた頃があったんだよ
で、固めることをpushって入ってたんだよねー
アメリカの伝統的牧畜の影響

517 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 18:28:01.48 ]
配列だと文字をstrcpyできないですかね?

char a[3]
a[0]='s';
a[1]='t';
a[2]='u';

char b[2];
b[0]='r';
b[2]='d';

この場合、strcpy(a,b);はエラーですか?


518 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 18:29:48.84 ]
pushはメモリに数値を書き込むって意味じゃなかったっけ?
それ以外考えられんのだが。

push abc 3

abc番地に3を書き込む。
違うっけ?

519 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 18:29:50.36 ]
>>517
運がよければ動く
確実にするには文字列の終端が必要



520 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 18:31:53.75 ]
新卒入社の研修かな

521 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 18:33:39.56 ]
>>519

char *s;
char *t;

s="good";
t="bad"

strcpy(s,t);だとOK?

配列型文字列はstrcpyダメで、ポインタ型文字列はstrcpyOK?

522 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 18:34:03.04 ]
内容も間違ってるし、書き込むスレも間違ってる

523 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 18:36:01.18 ]
>>521
さらにNG度UP!

524 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 18:36:31.96 ]
utf-8の文字コードで書かれたファイルを読んだ場合、strstrで比較してもちゃんとひっかかりますか?

525 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 18:43:13.25 ]
うん。

526 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 18:45:12.26 ]
>>521
アウト

>>524
探すものがasciiのみであるならば。

527 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 18:49:15.59 ]
ワロタwwstrcpy使えないじゃんww

>>521もダメで、>>517もダメなら何が正しいんだよ。

文字列はポインタか配列でしか表現できんだろうに

528 名前:デフォルトの名無しさん [2012/04/16(月) 18:50:28.97 ]
間違えたwww

strcpyじゃなくて

strcmpです。

よろしくお願いします。

529 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 19:07:04.22 ]
>>526
> 探すものがasciiのみであるならば。
ascii範囲外でも問題ないよ



530 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 19:08:49.27 ]
>>526
>>529

ありがとうございます。
ascii範囲外でも問題ないってどういう仕組みなんでしょうか?
勝手に文字コード判断して比較してくれてるんですか?

531 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 19:17:24.72 ]
単にバイナリで比較してるだけ。

532 名前:デフォルトの名無しさん [2012/04/16(月) 19:19:45.77 ]
別に文字コード判断する必要ないだろ

533 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 19:26:28.79 ]
やっぱそういうことか
おk
サンキュ

534 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 19:54:34.48 ]
>>528
天才

535 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 19:56:21.89 ]
>>527=>>517
>>517はまず文字列じゃないのでアウト。
>>521はリテラルに対する書き換えなのでアウト。

536 名前:526 mailto:sage [2012/04/16(月) 19:59:15.10 ]
>>530
双方がちゃんとutf-8なら問題ないです。ごめんなさい。

537 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 21:51:41.50 ]
#include <stdio.h>

int main() {
int i;
double a;

a=0;
for(i=0; i<10; i++) {
a = a + 0.1;
if(a == 0.3)
break;
}
printf("a =%6.3f\n", a);
return 0;
}

このプログラムでa=1.000ってなっちゃうんだけどなんでだろ
a=0.3じゃないの?

538 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 21:56:12.59 ]
a == 0.3が成立しないから。
なぜ成立ししないかは、浮動小数点数 誤差あたりでぐぐってしらべれ

539 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 22:22:49.88 ]
>>537
初めてCを習ったとき、それ注意されたわ
懐かしい。



540 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 22:32:44.34 ]
if ( a >= 0.3 )
break;

にでもしとけ


541 名前:デフォルトの名無しさん [2012/04/16(月) 22:55:01.33 ]
書式指定フォーマットの%Xで32ビット分しか表示されないのは仕様ですか?
※VS2010

542 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 22:58:56.93 ]
仕様です
もっとまともなC99対応コンパイラ使って下さい

543 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 22:59:28.56 ]
マニュアル読めば書いてあるだろうが

544 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 23:03:51.89 ]
色つきの文字って配列に入れたりできないのかな?
好きなときに保存した色を簡単にだしたいんだけどどうすればいいんだろう

545 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 23:06:11.14 ]
>>544
タグ付けとパーサ作ればおk

546 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 23:37:41.80 ]
パーサってなんだろ
色々調べてみたけどちんぷんかんぷんだから今は諦めます
ありがとう

547 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 23:51:30.35 ]
色つきの文字を表現する構造体を作って配列にすれば?
文字列としても使いたいなら、文字列と色情報配列を持つ構造体にするとか。

548 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 01:14:18.11 ]
cursesお勧め

549 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 01:33:07.38 ]
printf( "\033[2J" ); /* これまでの画面を消去します。*/
printf( "\033[043m ABC\t" ); /* 背景色黄色で ABC と表示し、タブを表示します。*/
printf( "\033[034m DEG\t" ); /* 青色で DEF と表示し、タブを表示します。*/
printf( "\033[031m GHI\n\n" ); /* 赤色で GHI と表示し、2回改行します。*/



550 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 19:12:19.74 ]
動的に確保したい構造体配列(hoge)のメンバに動的に確保したい構造体配列(sub)を持ったもの
を考えており、main関数で宣言自体をして確保、解放自体は別の関数でするようなものを作ってみたのですが
どうもしっくり来ないんですがもっといい方法はあるのでしょうか。

codepad.org/D6VOZ2X6

551 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 19:17:12.94 ]
>>550 の方法がいいと思うよ

552 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 19:42:18.40 ]
>>550
関数名をalloc_hogeとfree_hogeとかに変えたらいいんじゃないだろうか

553 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 19:50:17.03 ]
どのあたりがしっくりこないんだろ。
確保と解放が完全な対になってないあたり?

554 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/17(火) 20:14:05.67 ]
>>550
C はそういうものじゃね?
C++ ならもうちょっと「しっくりくる」ように書けそうに思うけど。

555 名前:550 mailto:sage [2012/04/17(火) 20:20:47.88 ]
とりあえずセグメント違反を繰り返しながらここにたどり着いたのでしっくりこない点は

free関数の引数が*hogでいいが確保では**hogにしないといけないのか
確保関数でアドレスの先頭を表すのにhog[0]を使わないといけないのか

です。

556 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/17(火) 20:30:51.83 ]
>>555
一般的な感覚だと
struct hoge* initial_main(void)
{
struct hoge* hog = malloc(sizeof(struct hoge));
hog->A = malloc(sizeof(struct sub)*(2));
hog->B = malloc(sizeof(struct sub)*(4));
hog->C = malloc(sizeof(struct sub)*(8));
hog->C[5].a = 100;
return hog;
}

と定義しといて、
呼出す側は

hog=initial_main();

じゃないかなぁ。

557 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 20:31:15.83 ]
>>555
こんな感じとか。
名前は、initial_mainじゃなくて create_hogeとかalloc_hogeにしたほうがいいと思うけど

struct hoge* initial_main()
{
struct hoge* hog;
hog = malloc(sizeof(struct hoge));
if(hog){
hog->A = hog->B = hog->C = 0;
hog->A = malloc(sizeof(struct sub)*(2));
hog->B = malloc(sizeof(struct sub)*(4));
hog->C = malloc(sizeof(struct sub)*(8));
if(hog->C){
hog->C[5].a = 100;
}
}
return hog;
}

558 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/17(火) 20:34:55.46 ]
>>557
確かに initial って名前だと確保とは別っていう印象を受けるね。
C++ から用語を取って construct でもいいかも。

559 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 20:37:32.06 ]
基本どおりに 〜〜alloc と 〜〜free でいいだろ



560 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 20:43:32.00 ]
>>556,557
ありがとうございます。名前はわかりやすくしときます。

struct hoge* initial_main(void){ }
ような使い方を知りませんでした。
こっちのほうがぱっと見わかりやすいです。

561 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 21:05:40.25 ]
>>560
mallocとかと変わらんよ。

562 名前:デフォルトの名無しさん [2012/04/17(火) 21:50:02.50 ]
「malloc_なんたら」を C++ では作りやすくしてくれてるだけ
construct はやだな、extern "C" したときのうんこ臭が耐えがたい

563 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 21:52:09.11 ]
なんでC++?

564 名前:デフォルトの名無しさん [2012/04/17(火) 22:12:25.72 ]
あ、隔離する気ならノープロブレム

565 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 22:50:14.48 ]
>>557
> create_hogeとかalloc_hogeにしたほうがいいと思うけど
create,alloc,init(ialize),newなどは好みだけど
hoge_createやhoge_allocのほうがいいと思うな。

566 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 22:52:23.06 ]
create_hoge = hogeを作れ
hoge_create = hogeが作る

567 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/17(火) 22:59:51.50 ]
合成語として考えるなら hogecreate でもおかしな順序ではないよ。
伝統的には create_hoge の方が主流に思えるのは確かだけど…。

568 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 23:01:43.59 ]
めんどくせぇからnewつかえるのに移れよ

569 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 23:04:43.68 ]
namespace 的な考え方すりゃ接頭辞を共通にしたほうが分かりやすい



570 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/17(火) 23:06:34.62 ]
>>565
俺の好みでは確保したメモリの構造を見せる場合には alloc と free で
ハンドルとして扱ってもらう場合には create と close って使い分けな感じ。

571 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 23:06:39.12 ]
うん

572 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 23:08:09.28 ]
>>567
gtk_init
Py_Initialize
lua_open
SDL_Init

573 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/17(火) 23:10:48.08 ]
>>572
そのあたりは API としての性格をもったものだから区別が必要じゃないかなぁ。

574 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 23:14:23.02 ]
allocateとinitializeをallocate関数でやるのはどうかと思うの。

575 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 23:27:45.93 ]
>>573
じゃぁ
組み込みではなく生成したインターフェースが
NAME_newな形になるCSTLはどう?

create_hoge
より
hoge_create
のほうが扱いやすいと思うよ
補完しやすいし。

576 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 23:32:59.54 ]
C++じゃ
 オブジェクト.メソッド
なんだが、お前らオブジェクト指向言語使わんの?

577 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 23:37:05.61 ]
どーせ ファクトリ.create_hoge vs ファクトリ.hoge_create になるよ

578 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 23:37:50.58 ]
>>576
ンなの聞いてねーよks
スレタイすらも読めないのかよ池沼
ヒャッペン音読して出直せバカ

579 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/17(火) 23:41:04.09 ]
>>575
マクロを使って生成しているとは言え、それも CSTL というライブラリが提供している API っていう気もする。
ただ、いずれにせよ上述の「主流に思える」というのはそうでもないかな、という気がしてきた。



580 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/17(火) 23:58:47.15 ]
>>575
補完しやすいというのは疑問があるぞ。 構造体とそれに対する操作の組を名前にするわけだろ。
だとすると hoge_ まで入力したときの候補は create_ まで入力した候補より分量が多くなる。
補完候補は少ない方が良いと考えると create_hoge の方が補完しやすいと言えないか?

581 名前:デフォルトの名無しさん [2012/04/18(水) 00:19:00.97 ]
個人的にgimpソースハックしたときに、関数名の冗長さには苦労させられたわ
GtkWidget *scale;
scale = gimp_prop_spin_scale_new (config, "brush-size", _("Size"), 0.01, 1.0, 2);
gimp_spin_scale_set_scale_limits (GIMP_SPIN_SCALE (scale), 1.0, 1000.0);
gimp_spin_scale_set_log_mode (GIMP_SPIN_SCALE (scale), TRUE);

終始こんな調子の長い名前で変数や関数が羅列されてる。
処理的には大して高度なことしてないのに、パッチ当てるべき箇所を探すだけでも、妙に疲れる。

経験的実感として、全体が長い名前ばかりなコードは、明らかによみずらい。妙な疲労感を伴う気がするわ。

関数は gmp_set_scale() や gmp_new_scale() 程度の10文字程度の長さが最も読みやすいと経験的に感じる。これ以上長いと短期記憶を余計に消費して疲れるし、これ以上短いと意味が不明で疲れる。

582 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 01:10:33.43 ]
そしてその命名ルールを守ってもGIMPほどのモノは作れないという不思議w


583 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 01:32:30.77 ]
>>579
単なるモジュールプレフィクスだよ。
関数名が被らんようにと言うのが主目的で、操作対象を表すわけじゃない。
せいぜいどのモジュールに属する関数かという程度。

モジュール外部と結合する意味でAPI的と言えるだろうけど、
CSTLが提供している云々は関係ないな。
外部結合だから出力の命名規則がそうなってるだけだ。

なんで、意味合いが違うのは同意なんだけど、Cの世界じゃ
モジュールに分けたらプレフィクス付ける方が主流だと思うよ。

584 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 02:07:17.52 ]
>>580
ない。

585 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/18(水) 13:09:12.05 ]
>>583
俺は API 的というのを広い範囲で、外に公開する名前くらいの意味で言ってた。
言葉の使い方を除けばだいたい認識は一致していると思う。

586 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 20:03:47.61 ]
>>582
gimpって規模は異常に巨大だけど、徹底的にコードを単純な書式にして、モジュール化も徹底してるおかげで
局所単位でいぢれるし、局所単位で見ればそれほど超高度なことをしてる箇所は少ないので、意外と改造できるのでハック初心者の練習におすすめ。

とにかくコード書式が、これでもかというほど単純なように徹底されてる。
関数中で使う変数の宣言は、必ず関数の先頭位置で行うようになってるし、
GtkWidget *scale;
scale = gimp_prop_spin_scale_new ();

GtkWidget *scale = gimp_prop_spin_scale_new ();
と書くことすらしない。徹底的に一行の情報量を減らすというアプローチで書かれてる。
一見すると過剰な程にコードが簡易化されてるが、そのおかげで、所見でもある程度読める。ただし全体の行数は膨大。

587 名前: ◆QZaw55cn4c mailto:sage [2012/04/18(水) 21:38:55.50 ]
>>586
>GtkWidget *scale;
>scale = gimp_prop_spin_scale_new ();
>を
>GtkWidget *scale = gimp_prop_spin_scale_new ();
>と書くことすらしない。

auto変数の初期化すら嫌いな -pedantic な人たちなのでしょう、多分。

588 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 21:46:14.13 ]
GTK自体の仕様がよくわからん…

589 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 21:49:24.30 ]
っていうか
関数スコープの途中で変数宣言できるようになったのってC++が出てきてからじゃね?

1行の情報量を減らすってのはなるほどなぁとは思う。




590 名前:デフォルトの名無しさん [2012/04/18(水) 22:12:00.57 ]
関数スコープとか・・・またまた香ばしいw

591 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 22:13:38.56 ]
ブロックの先頭以外、でいいのにね

592 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 22:24:29.30 ]
関数スコープは荒れる


593 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 22:36:08.96 ]
うん

594 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 23:32:26.55 ]
関数スコープの宿命だな

595 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 23:33:08.58 ]
関数スコープの宿命はよ


596 名前:デフォルトの名無しさん [2012/04/19(木) 00:02:06.72 ]
言うなら PG の、C 使いの宿命を言ってみな

597 名前:デフォルトの名無しさん [2012/04/19(木) 00:45:13.12 ]
お前が関数ポインタの宿命を言ったらな。

598 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 00:51:23.99 ]
C++のソースがCのソースに変換されたのを見て、ショックを受けた、口

599 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 00:54:48.71 ]
C++のtry-catch構文って、Cのソースに変換すると、どんな記述になりますか?



600 名前:589 mailto:sage [2012/04/19(木) 00:57:41.83 ]
catch, finallyブロックのアドレスを順番にスタックに積んでいって
割り込みハンドラーが呼ばれたら順番にそれを呼べば良いんじゃね?

601 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 00:58:47.42 ]
無理じゃね

602 名前: ◆QZaw55cn4c mailto:sage [2012/04/19(木) 01:02:45.86 ]
>>599
www.nurs.or.jp/~sug/soft/super/longjmp.htm

603 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 01:04:11.92 ]
関数ポインタならできるんじゃね?


604 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 01:04:55.24 ]
>>600 >>602 情報どうもです、結構複雑になるんですね

605 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 01:30:15.28 ]
前処理におけるエラーについての質問です。

#if (TESTDEF == 1)
aaa();
#else
bbb();
#endif

上の例では TESTDEF が 1 だったら、aaa() を実行して、
そうでない値のときには bbb() を実行してくれることを期待して記述し、そのように動作します。

しかし TESTDEF が未定義の場合にも bbb(); が実行されてしまいました。
てっきり未定義エラーのようなものが発生すると思ったので驚きました。

上記のようなことをする場合に、
TESTDEF が未定義である場合にコンパイルエラーとする方法はありませんでしょうか?


606 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 01:33:19.91 ]
#if (ISSET_TESTDEF == 1)
ccc();
#else
ddd();
#endif

なるプリプロセッサを延々と書き連ねる


607 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 01:35:44.19 ]
>>605
#errorを使う。
codepad.org/YkpizD6p

608 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 02:15:29.40 ]
>>606-607
やはり前処理1行だけで判断させてエラーにするのは難しそうですね。
>>607のコードのやりかたで自分でエラー行を書く方法で考えてみます。

ありがとうございました。


609 名前:デフォルトの名無しさん [2012/04/19(木) 02:38:18.42 ]
ふざけた野郎だな。



610 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 03:05:07.76 ]
>>606がだよな。いみわからんし

611 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 03:28:31.23 ]
#ifdef TESTDEF
#if (TESTDEF == 1)
aaa();
#else
bbb();
#endif
#endif

612 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 04:13:03.33 ]
プリプロセッサには elif 構文あるんだけどな

613 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 04:44:52.45 ]
この時どうするかいい方法が思い浮かばんかった。

#include <stdio.h>

#define TESTDEF

void aaa(void)
{
fprintf(stdout, "aaa\n");
}

void bbb(void)
{
fprintf(stdout, "bbb\n");
}

int main(void)
{
#ifndef TESTDEF
#error "not defined TESTDEF."
#elif TESTDEF == 1
aaa();
#else
bbb();
#endif
return 0;
}


614 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 04:59:40.34 ]
mfcなんですが、何故か?値が代入されません

for ( i=0; i<opetbl.recv_len; i++ ){
recv_dt.data[i] = (unsigned char)opetbl.recv_data[i];


と言う文が有ったのですが・・・
同じ様に・・・

for ( i=0; i<opetbl.recv_len; i++ ){
recv_dt.data[i] = (unsigned char)opetbl.recv_data[i];

dainyuu_data[i] = (unsigned char)opetbl.recv_data[i];



615 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 05:00:01.66 ]
と、入れてみました。上の方は値がちゃんと代入されるのですが
同じ事をやっている下は代入されません・・・

変数の宣言は、グローバル変数で宣言しました

int dainyuu_data[RECV_LENG];

一方、値が代入される変数は、
union を使い、やっています。

union U_recv_dt {
unsigned char data[RECV_LENG];
};

メモリの設定とか、必要なのでしょうか?

616 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 05:15:43.14 ]
>一方、値が代入される変数は、
recv_dt のこと?

dainyuu_data は int の配列
recv_dt は unsigned char の配列

代入されているかの検証で
元データを文字列と期待し printf にて先頭アドレスを渡したとすると、異なる出力になるのは当然だと思うが
配列の index 総なめで、個々に出力してみたの? (printf("%d\n", daynyuu_data[i] ってこと)

617 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 05:50:29.80 ]
fprintf(stderr, "dainyuu_data = %p\n", dainyuu_data);
で代入時、参照時にdainyuu_dataのaddress確認してみたら?
異なると思うよ。

618 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 06:06:59.39 ]
>>616
>>617
有り難うございます。

>dainyuu_data は int の配列
recv_dt は unsigned char の配列

unsigned char の配列でも試してみましたが、駄目でした。

>総なめで、個々に出力してみたの? (printf("%d\n", daynyuu_data[i] ってこと)

デバグモードのブレークポイントで配列の中を確認しました。
入っていない様です、また画面に表示も出ません(値は0です)

返信有り難う御座います・・・ 
疲れたので寝ます・・・

619 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 07:04:42.88 ]
おやすみ、ムーニーマン



620 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 10:10:58.61 ]
下の代入文は本当にfor文の中に入ってるの?

621 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 10:45:52.19 ]
デバッガ使ってて分からんぐらいだから、他のスレッドにリセットされたことも考慮しないとだめかもね

622 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 10:59:41.13 ]
うむ

623 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 11:13:08.28 ]
グローバル以外にもdainyuu_dataという名前の配列があるとか。

624 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 19:20:12.59 ]
そうだよ

625 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 22:17:47.25 ]
次の方どぞ

626 名前:デフォルトの名無しさん [2012/04/19(木) 23:03:21.29 ]
宿命はよ

627 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 17:55:05.45 ]
C++の基本〜標準を学校で学びましたが
C言語を独学で勉強できますか?

628 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 19:03:38.06 ]

                       できます。具体的には以下の通りです。

              「C実践プログラミング」 でCの文法、make、gdbなど、基礎を習得
                                ↓
     「C言語ポインタ完全制覇」 or 「秘伝C言語問答 ポインタ編」 でポインタに関して完全理解する
                                ↓
「エキスパートCプログラミング―知られざるCの深層」 でスタック、ヒープ、リンカ、ローダなど周辺知識を習得
                                ↓
      「C言語によるオブジェクト指向プログラミング入門」 で大規模プログラムの作り方を学ぶ
                                ↓
           「C言語デバッグ完全解説」でバグに強いプログラムの記述法をマスター
                                ↓
        「Code Complete(上)(下)」でより良いC言語プログラムとは何かを各人で考察する
                                ↓
                              神の誕生

629 名前:デフォルトの名無しさん [2012/04/20(金) 21:55:24.56 ]
-神の誕生
+土方の誕生



630 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 22:39:06.55 ]
ゲーム作るには最低どのくらいの知識が必要なのよ

631 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 22:44:57.75 ]
歩く前に歩くことをやめる人間には無理

632 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 22:45:39.31 ]
何の知識だよ

633 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 22:49:01.61 ]
最低でも四元数
あとはUI関連の古典 誰のためのデザイン でも読んどけ

プログラム知識だけで面白可笑しく作れるとか思ったら
そいつはアホ


634 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 22:51:05.14 ]
誰がゲームを面白おかしく作れるための知識がほしいって書いてんの?

635 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 22:53:06.67 ]
面白くもおかしくもない一流のクソゲーでも作りたいのかwww
いやそういう知識なら俺は知らんよw


636 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 22:58:50.78 ]
ゲーム作るのには四元数は必須だよな。俺もそう思う。
どんなゲームでも絶対使うもん。マインスイーパとか。

637 名前:デフォルトの名無しさん [2012/04/20(金) 22:59:23.41 ]
>>630
それはおまえさん自身が決めることだ

少しでもマシンの動かし方を憶えたら
こんなことできないか? とアイディアから始めるんだ

必要な知識はそれによって決まる

ゲームプログラマってのはコンピュータのプロではなく
遊びのプロであることを片時たりとも忘れてはならない

638 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 23:06:59.79 ]
そんなもんディレクターとかデザイナーの話だろ
プログラマとは別

639 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 23:08:07.03 ]
質問者はスレチともどうとも取れない感じだったのに、回答者が全力でスレチってどういうことなん。
しかも超偉そう。



640 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 23:10:55.97 ]
ゲームプログラマは、無能な企画の脳内にあるイメージを口頭でのわずかな情報で再現する能力が必要

641 名前:デフォルトの名無しさん [2012/04/20(金) 23:18:05.79 ]
ディレクタやデザイナになりたければ
そこそこの組織に入るにはどうするかが問題となる

で、面接でくだんの質問をしたらまず祈られるだろう

スレチとか言っている連中はそこがわかってない
内容的に1人で勝負できる人がスポンサーをつのる様相がわかってない

642 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 23:23:36.78 ]
ああごめん。たしかに俺わかってなかった。
スレチじゃなくて板違いだったね…

643 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 23:30:38.38 ]
(白黒4階調の初代ゲームボーイで)フルカラー出してくれ。

と企画から言われた時は、ハードウェアのマニュアルをそいつに投げ付けた事は良い思い出。

644 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 23:40:30.49 ]
インベーダーの仕様や白黒TV用カラーガラスでも投げ返されると面白いんだがな

645 名前:デフォルトの名無しさん [2012/04/20(金) 23:41:01.13 ]
色のにじみでハードの定義にない色を出していたのも良い思い出
通信路の定義の違いまで何とかできてしまったのは無知のおかげで今の俺なら発狂してた
そこそこの組織にいる人ならハード担当と癒着でない仲の良さを大事にする

646 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 23:43:00.93 ]
>>645
その時代の話、結構興味あるので、酉とかつけてもらえますか?

647 名前:デフォルトの名無しさん [2012/04/20(金) 23:44:55.59 ]
さんずいがねえなあ

648 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 23:50:13.31 ]
じゃあ酒あげるんで、レスの1行目に
〜おじさんの楽しい昔話〜
ってつけるようにしてもらえませんか

649 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 23:51:23.08 ]
〜おじさんの楽しい昔話〜(板違いじゃないよ!)
でもいいです。あと、もしおばさんだったらごめんなさい。その場合はおばさんと表記を改めていただけるようお願いします。



650 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 23:52:54.49 ]
ゲ板にでもスレ立てたら?

651 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 23:55:05.77 ]
ほんとだよな。

652 名前:デフォルトの名無しさん [2012/04/20(金) 23:58:48.56 ]
そりゃごっつぁん、でマダー?tntn
1行目がどうのって意味わかんねえし
セクハラ野郎は嫌いだぜ

653 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 00:03:29.27 ]
レスを抽出してまとめて読めるからだよ

654 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 00:04:05.35 ]
興味ない人はNG設定できる副作用もあるよ。

655 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 02:09:25.93 ]
>>628
ありがとうございます

656 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 02:09:28.86 ]
MPIってモッピーと読むと言われたが冗談ですよね?

657 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 02:15:53.72 ]
>>655
それコピペ






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<138KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef