5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C言語なら俺に聞け(入門篇) Part 45

1 :デフォルトの名無しさん:2009/02/19(木) 20:47:45 ?PLT(56870)
C言語の入門者向け解説スレッドです。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
 C/C++の宿題片付けます 122代目
 http://pc11.2ch.net/test/read.cgi/tech/1232029287/

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 44
http://pc11.2ch.net/test/read.cgi/tech/1233962622/
過去スレ
http://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

2 :デフォルトの名無しさん:2009/02/19(木) 23:26:50
char *color_name[] = { "red", "green", "blue" };
printf("testcolorchar=%s\n", color_name[1]);
これで"green"が取得できるけど、
"green"の"n"を取得するには何て書けばいいんですかの。

3 :デフォルトの名無しさん:2009/02/19(木) 23:30:44
・printf("%c\n", color_name[1][4]);
・printf("%c\n", strchr(color_name[1], 'n'));
・printf("%c\n", 1[color_name][4]);

4 :デフォルトの名無しさん:2009/02/19(木) 23:31:27
いけね、2番目訂正。
printf("%c\n", * strchr(color_name[1], 'n'));

5 :デフォルトの名無しさん:2009/02/19(木) 23:38:27
ノ printf("testcolorchar=%s\n", color_name[2]-2 );

6 :デフォルトの名無しさん:2009/02/19(木) 23:40:46
>>5
それは無理。

7 :デフォルトの名無しさん:2009/02/19(木) 23:58:42
>>3
printf("%c\n", color_name[1][4]);
エラーになって2時間悩んだけど%sにしてたからだったのか。

8 :476:2009/02/20(金) 00:07:55
ポインタ演算子って多くないですか?
覚えるのややこしいし
int u[10][5];でu[1][2];の値を出すにはどうしますか?
私はu[1][2]とやります
わざわざ*(u[1]+2)とかやるのでめんどくさいので
統一とかあるんですか?

9 :デフォルトの名無しさん:2009/02/20(金) 00:08:20
うぜえ

10 :デフォルトの名無しさん:2009/02/20(金) 00:13:12
ポインタ操作ほど操作が統一されている物もないだろう…

11 :デフォルトの名無しさん:2009/02/20(金) 00:27:00
かけ算と紛らわしいくらいでややこしいってほどのもんじゃなかったような

12 :デフォルトの名無しさん:2009/02/20(金) 00:45:07
まだいたのか

13 :デフォルトの名無しさん:2009/02/20(金) 00:54:26
まだ釣られてるのか

14 :5:2009/02/20(金) 01:05:48
>>6 実行環境言ってみ
>>2は"n"の取得を聞いてる。
*color_name[] = { "red", "green", "blue" };
文字リテラルの初期化だから、目盛り構造は、
[r] [e] [d] [\0] [g] [r] [e] [e] [n] [\0] [b] [l] [u] [e] [\0]
printf("%s",p);の時か
p=color_name[1]+4; p =color_name[2]-2;
でpは、"n"へのポインタとなる。これが、"n"の取得と解釈した。

15 :デフォルトの名無しさん:2009/02/20(金) 01:23:41
char*配列のデータが連続して配置される保障ってあるの?
別場所に同じ文字列があったりしたらコンパイラが配置の最適化できると思ったんだけど

16 :デフォルトの名無しさん:2009/02/20(金) 01:28:02
>>14
配列の配列と勘違いしてるし
仮に配列の配列だとしても要素配列の間にパディングが入らない保障はない(滅多にないだろうけど)

17 :デフォルトの名無しさん:2009/02/20(金) 01:41:48
>>14
パディングとか関係なく、連続で取られる保証はないし、
順番がソースコードの出現順である保証も全然ないし、
ありえないにも程がある

18 :デフォルトの名無しさん:2009/02/20(金) 02:03:58
なんで必要性もなく、効率が良いわけでもないメモリ配置に依存しているコードを書くのよ…

19 :デフォルトの名無しさん:2009/02/20(金) 02:04:16
>>14
実際にやってみなよ。"red,", "red", "blue", "green", "blue"みたいに重複が発生するように。
それでもあんたが主張するようにしか配置されていないのだとしたら、あんたの使っているコンパイラが蛸だ。

20 :デフォルトの名無しさん:2009/02/20(金) 02:05:54
>>18
>14のことなら、今背伸びしたいお年頃なんでしょ。

21 :デフォルトの名無しさん:2009/02/20(金) 02:13:02
>char *color_name[] = { "red", "green", "blue" };
>printf("testcolorchar=%s\n", color_name[1]);
>これで"green"が取得できるけど、
ここまでは分かる。しかし…

>"green"の"n"を取得するには何て書けばいいんですかの。
これが分からんのだよ。つまり最後の一文字を取得したいという事?
そうであれば以下のようにすればよいかと。

char *color_name[] = { "red", "green", "blue" };
char *element = color_name[1];
int len = strlen(element);
char c = element[len-1];

これで



22 :デフォルトの名無しさん:2009/02/20(金) 02:17:57
…途中で送信してしまったorz

char *color_name[] = { "red", "green", "blue" };
char *element = color_name[1];
int len = strlen(element);
char c = element[len-1];

これで配列color_nameの第一要素"green" の最後の一文字がcに入るよ。
文字列や文字のsignedとunsignedの違いに気を付けてね。

23 :デフォルトの名無しさん:2009/02/20(金) 02:26:17
ふつうに
char* pc;
pc = color_name[1];
for(i = 0; *(pc + 1) != '\0'; pc++);

では駄目なん?

24 :デフォルトの名無しさん:2009/02/20(金) 02:28:32
ふつうとは?

25 :デフォルトの名無しさん:2009/02/20(金) 02:28:40
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ  まピョーん☆
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ


26 :デフォルトの名無しさん:2009/02/20(金) 02:28:52
iいらないじゃん…
寝ぼけているな俺

27 :デフォルトの名無しさん:2009/02/20(金) 02:31:20
叩けるコードが出てきた時のこのスレの賑わいは異常

28 :デフォルトの名無しさん:2009/02/20(金) 03:21:36
レベルが初歩的だとなおのこと盛況

29 :デフォルトの名無しさん:2009/02/20(金) 03:24:18
叩けないコードを勘違いして叩いたあげくに逆ギレするよりよっぽどマシw

30 :デフォルトの名無しさん:2009/02/20(金) 04:33:10
ここも2ちゃんだから、勘違い上級者なら叩かれても仕方ない。
しかしそのままずっと勘違いするよりはマシかもな

31 :℃素人:2009/02/20(金) 09:02:10
/* プログラム@ */
#include <stdio.h>

int main( void )
{
int *x,*y;
printf("%d\n",(&y-&x)); /* ここでの表示結果は"1" */
return 0;
}
//------------------------------------------------------
/* プログラムA */
#include <stdio.h>

int main( void )
{
int *x,*y;
printf("%d\n",sizeof(&y-&x)); /* ここでの表示結果は"4" */
return 0;
}
//-------------------------------------------------------
プログラムAではsizeof演算子を付けて
望んでいた結果の"4"が出力されます。
何故、プログラム@では"1"が出力されるのでしょうか?

コンパイラは「Microsoft(R)32-bit C/C++ Standard Compiler」です。

32 :デフォルトの名無しさん:2009/02/20(金) 09:07:33
1はアドレス同士の計算結果を表示してるのに対して、
2はアドレス同士の計算で返った結果のサイズ(アドレスのサイズ)を表示してるから。

33 :℃素人:2009/02/20(金) 09:29:37
早速のレスありがとうございます。
しかし、@のプログラムでも"ポインタ"のアドレスの計算を
しているワケですので、私の32bit環境ではポインタとして
4byteをメモリに占めているので"4"が返ってきても良いとは
思うのですが・・・すみません。

34 :デフォルトの名無しさん:2009/02/20(金) 09:31:17
>>31
その結果が正しいとして...
MSC++では、アドレスは4バイト単位みたいな感じ
ポインタは32ビットで表記するのにね。

35 :デフォルトの名無しさん:2009/02/20(金) 09:35:59
>>33
ポインタ同士の引き算は、実際のアドレス値ではなくポイント対象の距離になる。
例えばこれらはどれも1。

int foo[2]; printf("%d\n", & foo[1] - & foo[0]);
char foo[2]; printf("%d\n", & foo[1] - & foo[0]);
double foo[2]; printf("%d\n", & foo[1] - & foo[0]);

しかし、配列やヒープのように連続していることが保証されている場合以外に
ポインタ同士の引き算を行なっても結果は保証されない。
つまり、>32の(1)は何が起きても不思議ではない危険なコードと言うことになる。

しかし、>32の(2)は演算結果の型のサイズを取得しているだけなので話は別。
>32の2行目の表現は、「アドレスのサイズ」ではなく「ポインタのサイズ」とするべき。

36 :℃素人:2009/02/20(金) 09:50:00
>>35さん
ありがとうございます。
ちょっとこれから出かけてきますので、
また後ほど。

37 :デフォルトの名無しさん:2009/02/20(金) 09:51:34
((char*)&foo[1]-(char *)&foo[0])/sizeof(type)
といつでも解釈して貰えると思ったらそれは違うだろ

38 :やれやれだぜ:2009/02/20(金) 09:56:26
>>37
& foo[1] - & foo[0]
を等価の式に変換してごらん。

pointer[integer]は*(pointer + integer)と相互に置き換えが可能だから、
& pointer[integer]は&*(pointer + integer)になる。後は判るだろ。

39 :デフォルトの名無しさん:2009/02/20(金) 10:45:50
久しぶりにプログラムを書いてみようとしたら、構造体やらポインタでつまずいた。

typedef struct Tag{
int member;
char text[1024];
}KOUZOUTAI;
メンバ変数のサイズの取得の仕方がわからん。

KOUZOUTAI Obj,*pObj;
pObj = &Obj
int size = sizeof(pObj->text);
でいいの? (size == 1024 になって欲しい)

あと、メンバ変数のアドレスを調べたい
memberのアドレスを調べるには、多分、&(pObj->member)でいいと思うけど、textの方は?
&(pObj->text[0])とかでいいの? それとも、pObj->text のようにするの?

普段、クラスはおろか構造体すら使わないので忘れてしまった。
どうでもいいけど、構造体ってコンストラクタを持てるんだね。初めて知った。

40 :デフォルトの名無しさん:2009/02/20(金) 10:48:05
>普段、クラスはおろか構造体すら使わないので忘れてしまった。
>どうでもいいけど、構造体ってコンストラクタを持てるんだね。初めて知った。

そりゃあんた、言語が違いまんがな。

41 :476:2009/02/20(金) 11:44:39
ポインタの説明が回りくどいんですが

int 型の変数へのポインタ値をしまうことのできるポインタ型変数 p が宣言される

これはつまり、int ball;があったとしたら

int型の変数(ball)のメモリアドレスの値(aのアドレス)をしまうことができる ポインタ*pってことでいいんですか?

日本語力とか言いますが一般人にはわかりずらいと思います

int a;  a は intである では無く  a は int型である のほうがわかりやすいと思いますし
int *a[10]; a は、intへのポインタの配列(要素数10)である。 これだと aはint型の配列を代入できるポインタとかでいいんですか?

ごっちゃになってるので誰か詳しくまとめてくれるとありがたいです。

42 :デフォルトの名無しさん:2009/02/20(金) 11:48:32
試せばすぐ判るようなこと聞くなよ。
しかし仕事で構造体を使わないCプログラムを書いたこと無いんだが、
>>39はどういう分野の人なのかな。

あと476はもう結構

43 :デフォルトの名無しさん:2009/02/20(金) 11:50:12
>日本語力とか言いますが一般人にはわかりずらいと思います
対象は一般人じゃなくてプログラマだからそれで良いんだよ。

>これだと aはint型の配列を代入できるポインタとかでいいんですか?
よくない

44 :デフォルトの名無しさん:2009/02/20(金) 11:55:43
char score2grade(int s)
{
if(s >= 80){
return 'A';
}else if(s >= 65){
return 'B';
}else if(s >= 50){
return 'C';
}else if(s >= 35){
return 'D';
}else{
return 'F';
}
}
最後の行がparse error at end of inputらしいんですが
どう直せばいいのでしょうか?

45 :476:2009/02/20(金) 11:58:46
44さん
私の環境ではコンパイラできました
たぶん他のコードでエラーがおこってるのかもしれません



46 :44:2009/02/20(金) 12:01:21
自己解決できました

47 :デフォルトの名無しさん:2009/02/20(金) 12:16:23
parse error at end of input
ホンニャクすると
こんだけのソースで仕事できっかよ!ゴラ

48 :デフォルトの名無しさん:2009/02/20(金) 13:45:30
>>41
まともな日本語力のある人間は
「ポインタ値」を勝手に「メモリアドレスの値」に変更したり
「変数(ball)」を「a」に変更したりしない

あとここはお前の読んでいる本の訂正をしてくれる場所じゃない

49 :デフォルトの名無しさん:2009/02/20(金) 14:03:40
476は中学生か?
いい加減に自立しろよ
親にでも聞け

50 :デフォルトの名無しさん:2009/02/20(金) 14:39:01
int main(void){
char select[2];
int a,b;
printf("1文字分\n"); /* 1回目 */
fgets(select, 2, stdin); sscanf(select, "%d", &a);
printf("1文字分\n"); /* 2回目 */
fgets(select, 2, stdin); sscanf(select, "%d", &b);
/* aとbを後の処理で数値として利用 */
return 0;
}

この場合、2回目が実行されません。
select[]を空にしなくてはいけないのだとと思い、1回目の処理の後、
[0]と[1]に\0を入れてみましたが、問題が解決されることはありませんでした。
配列を2つ用意すれば解決はしますが、できることなら配列を1つのみで
すべての処理を行いたいと考えております。どうしたらよろしいのでしょうか?

51 :デフォルトの名無しさん:2009/02/20(金) 14:43:20
>>50
配列の中身は関係ない。問題は配列の大きさと読み込む文字数にある。
fgets(select, 2, stdin);
この命令は、stdinから1バイトしか読み込まない。
つまり、Enterキーを叩いたときの\nはストリームに残ったままとなる。
次のfgetsではその\nだけが読み込まれる。
配列のサイズと読み込み文字数を増やすこと。

52 :476:2009/02/20(金) 14:59:35
int u[10];
int (*p)[2];
p=u;
u[10]を2次元配列として扱いたいんですが
p=u;とやっても u[5][2]みたいな感じになりません
どうすればよろしいのでしょうか?

53 :デフォルトの名無しさん:2009/02/20(金) 15:00:36
>>52
論理的な思考のできない人間がプログラミングやるのはあきらめてください

54 :50:2009/02/20(金) 15:02:40
>>51
なるほど、理解できました。
素早い回答、ありがとうございます!

55 :デフォルトの名無しさん:2009/02/20(金) 15:11:24
>>53
君にそれはそのまま当てはまるかもしれんぞ

56 :デフォルトの名無しさん:2009/02/20(金) 15:23:54
>>476
typedef int (*array_5_2)[5][2]
array_5_2 p;
p=(array_5_2) &u[0];
でコンパイラが解ってくれたら儲け物ぐらいに思っておこう。
実際に動かして問題が無いかチェックする作業は絶対に
避けられない。(出来れば出力アセンブルコードを見て
検証したいもの)
コンパイル出来ても期待した通り動いてくれる保証は無いから。

こういう場合は、自分で二重添字を一次元化する処理をして
配列を扱うのがキホン

#define U(i,j) u[ 5*((j)-1)+(i) ]
てな感じで、マクロにしてしまおう。
型変換に関してはCは実は余り得意ではなく、すんなり通すがやること
滅茶苦茶なケースが多い。
typedef やマクロに進むまで配列やポインタはひとまずフリーズ
したらどーだ?

57 :デフォルトの名無しさん:2009/02/20(金) 15:26:04
いや確実に大丈夫だろ

58 :デフォルトの名無しさん:2009/02/20(金) 15:26:08
55さん
ポインタ苦手あんですが
ポインタってそこまで重要しなくていいんですか?
やっぱポインタがわからないとダメですか?
プロの方とかはポインタとか沢山使ってるのでしょうか?
仕組みとかわからないとむかつきます。丸暗記みたいにつめこむのがやなので



59 :デフォルトの名無しさん:2009/02/20(金) 15:29:41
仕組みがわからないとむかつくって…
君はprintfがどのような事をやっているかわかっているの?
int a = 1;がどのような処理を行っているかわかってるの?

60 :デフォルトの名無しさん:2009/02/20(金) 15:41:58
>>58
仕組みがわからない段階で
それを使って人に使わせるのが嫌という心は健全だと思うね。
最低でもそのコンパイラが病気かどうかぐらいは診断できる
位のスキルが無ければ(つまり出力コードを見てその善し悪しを
判断できる)本来、コンパイラを使ってプログラムを製造し
人に販売するような行為を行うのは安全じゃない。
(それ言い出せば、今度はプロセッサが正常か、メモリが正常か
テスト出来なければNGとかになってお話にならないが)
ただ仕組みはわかったとしても一通りじゃないから、趣味や自己啓発
でやる限り、仕組みというよりか基本感覚みたいなものを感じ取れ
ればいいんじゃないのかな?

61 :デフォルトの名無しさん:2009/02/20(金) 15:42:04
int u[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int (*p)[2] = (int (*)[2])u;
int i,j;
for( i = 0; i < 5; i++ ){
for( j = 0; j < 2; j++ ){
printf( "%d\n", p[i][j] );
}
}

62 :デフォルトの名無しさん:2009/02/20(金) 16:09:09
「実体」を指さないポインタの使用の可否は強く処理系に依存

63 :デフォルトの名無しさん:2009/02/20(金) 16:28:58
991 名前:デフォルトの名無しさん[sage] 投稿日:2009/02/19(木) 22:35:34
問題です
1.int a; &aは、ポインタでしょうか?
>>476がんばってくれ。
↓参考
#include<stdio.h>
int main(){
printf( "476を応援 %d \(^O^)/%sTEL\n"+0XA,0x1dc,'-'/'-'+"POW\bWAT\b");
return 0;
}

64 :デフォルトの名無しさん:2009/02/20(金) 18:08:53
>>52
int u[10];
uの意味してるものは最初の要素であるu[0]の場所。
つまり、&a[0]であり、この型は int *型。
pは、int (*p)[2]; と宣言しているようにこれは int (*)[2]型。
このままだとp = u;は型が違うから代入できない。
でも[10]の並びを[5][2]という並びにしたい。
そこでキャストが必要になる。これを具体的に>>61がレスしてくれてる。
前スレでやってたのはこれと逆のbalance[2][5]をbalance[10]としたいキャスト。

とりあえず3日前よりはポインタ周辺の理解が進んでるんだから
>>56の言ってる通り、先に進むのがいいんじゃない?
前スレをきちんと保存しておいて、後で読み返せるようにしとくのがいいと思うよ


65 :デフォルトの名無しさん:2009/02/20(金) 18:09:10
JavaとC/C++で迷っています。
プログラミングは未経験です。
どっちがわかりやすいですか?

66 :デフォルトの名無しさん:2009/02/20(金) 18:11:19
とりあえずC++が一番わかりにくいのは確かだ

67 :デフォルトの名無しさん:2009/02/20(金) 18:26:44
C言語を軽く一通りやって、C++の新しい文法とかをちょっとやったら
本気で、Javaの基礎から勉強する、とか。もちろん、CだけとかC→C++で全部やっててもいいんだけど、
最初やるべきは、Cの概論じゃない?

68 :デフォルトの名無しさん:2009/02/20(金) 18:28:56
C言語だけでも携帯ゲームって作れるんですか?


69 :デフォルトの名無しさん:2009/02/20(金) 18:36:04
>>68
PSPの開発言語は基本はC言語って聞いたことがある
DSはわからない

70 :デフォルトの名無しさん:2009/02/20(金) 18:39:40
携帯ならCかC++だろう

71 :デフォルトの名無しさん:2009/02/20(金) 19:02:07
質問です。

オープンソースのプロジェクトでソース解析してると、以下のような、
関数内部でメモリ領域を動的に確保して、それを戻り値として返す関数をよくみかけます。
直接malloc使ったほうがスタックの領域が無駄に蓄積しないと思うんですが、意図があって
作ってるんでしょうか。

#include <stdlib.h>

void *alloc(size_t n)
{
void *p;

p = (char*)malloc(n);
if(!p){
return NULL;
}
return p;
}

72 :デフォルトの名無しさん:2009/02/20(金) 19:04:49
ある構造体 MATRIX を以下の様に作っています。
 typedef struct MATRIX_STRUCT {
   long row;
   long col;
   float **data;
 } *MATRIX;

その上で、下の様に matA を宣言しています。
この matA を引数にして関数を実行し、その関数の中で
matA->data のサイズやデータを決めているのですが、
もとの関数に戻ってきたときに、matAがNULLのままになってしまいます。
詳しくは以下のように書いています。

void hoge(MATRIX matA);

int main(){
  MATRIX matA = NULL;
  hoge(matA);
  // matA が NULL のままです。
  return(0);
}

void hoge(MATRIX matA){
  matA = matalloc(3, 4); // 3*4の行列を作る関数です
  matA->data[0][0] = 1.0;
  matA->data[0][1] = 1.5;
  ・・・
  //この時点では、ちゃんと matA 内にデータが入っています。
  return;
}

どのように記述すれば良いのでしょうか?よろしくお願いします。

73 :デフォルトの名無しさん:2009/02/20(金) 19:10:47
MATRIX hoge(MATRIX matA){
  matA = matalloc(3, 4); // 3*4の行列を作る関数です
  matA->data[0][0] = 1.0;
  matA->data[0][1] = 1.5;
  ・・・
  //この時点では、ちゃんと matA 内にデータが入っています。
  return matA;
}

引数書き換えても反映されるわけねーだろ

74 :デフォルトの名無しさん:2009/02/20(金) 19:13:02
void hoge(MATRIX *matA){
  (*matA) = matalloc(3, 4); // 3*4の行列を作る関数です
  (*matA)->data[0][0] = 1.0;
  (*matA)->data[0][1] = 1.5;
  ・・・
  //この時点では、ちゃんと matA 内にデータが入っています。
  return;
}

呼び出し方法変わるけどこれでも


75 :デフォルトの名無しさん:2009/02/20(金) 19:17:04
>>71
大昔はmallocの返り値が(char*)だったらしいからその対策と思われる


76 :デフォルトの名無しさん:2009/02/20(金) 19:17:59
>>71
if(p==NULL)○
if(!p) 邪悪
なんの為に(char*)してるのか?
そのallocならばmallocをラップしてるだけで意味は薄い。
別のmalloc関数を使いたくてALTERの意味でラップしているの
かも知れないが.
malloc系のメモリを内部で確保して加工したものを返す関数
は個人的開発の場合多用すると何かと便利だが、集団開発を
前提とした開発の場合は多分タブー。
それ以前にmallocを多用するプログラムはCよりかC++
Javaのほうが向いている。(new/delete)
>>72
MATRIXじゃなくてpMATRIXという名前にすれば
*もしかしたら*間違えなかったかも

77 :デフォルトの名無しさん:2009/02/20(金) 19:18:33
>>71
マクロでデバッグのときだけ別の関数を呼ぶようにしてるとか、
コンパイル時に別のソースファイルに切り替えるとか。
多分将来の機能追加かデバッグ目的とか。
あと、malloc()の戻り値もpと同じ型だから、malloc()のキャストは削除した方がいい。
しかも、CではC++と違ってvoid *とその他の記憶領域へのポインタはキャストせずに相互代入可能だし。
作った人が変なだけかもしれない。

78 :デフォルトの名無しさん:2009/02/20(金) 19:21:52
>>75,76,77
なるほど。参考になりました。

79 :デフォルトの名無しさん:2009/02/20(金) 19:32:08
>>75
それって、void*型が無かったころの話じゃないの?
void* 型が導入されたけど、mallocの返り値はchar*のままっていう時代があったの?

80 :デフォルトの名無しさん:2009/02/20(金) 19:35:37
>>76
>if(p==NULL)○
>if(!p) 邪悪
君の好みなんか誰も聞いてません
元ソースはバカだけど

81 :デフォルトの名無しさん:2009/02/20(金) 19:38:58
>>71
以下はfreeを用いた加工関数だが、freeした後にNULL代入しておくと
二重freeの防止に役立つ。
void nfree(void *p)
{
free(p);
p = NULL;
}

82 :デフォルトの名無しさん:2009/02/20(金) 19:40:28
>>81
突然なにを?w

83 :デフォルトの名無しさん:2009/02/20(金) 19:41:48
>>81
どんな冗談w

84 :デフォルトの名無しさん:2009/02/20(金) 19:43:28
>>81
アホだなぁw

85 :デフォルトの名無しさん:2009/02/20(金) 19:44:06
>>82>>83
いや・・まじめに話してるんだが・・間違ってたらごめん

86 :デフォルトの名無しさん:2009/02/20(金) 19:45:16
>>85
本当に分からないのかよ・・・・・・w

87 :デフォルトの名無しさん:2009/02/20(金) 19:47:06
>>81
void nfree(void *p)
{
free(p);
p = NULL;
}
int main(void)
{
char *p=NULL;
printf("p=%p\n", p);
p=malloc(7743);
printf("p=%p\n", p);
nfree(p);
printf("p=%p\n", p);
return 0;
}

88 :デフォルトの名無しさん:2009/02/20(金) 19:47:35
ポインタが絡むと参照渡しがわからなくなる人は以外に多い。

89 :デフォルトの名無しさん:2009/02/20(金) 19:47:40
>>81


90 :デフォルトの名無しさん:2009/02/20(金) 19:48:18
>>72です。
みなさん、ありがとうございました。
希望通りの動作をしました。

まだポインタについて理解が足りないようです。

91 :デフォルトの名無しさん:2009/02/20(金) 19:50:59
>>81
#define nfree(p) do { free(p); p = NULL; } while (0)


92 :デフォルトの名無しさん:2009/02/20(金) 19:57:14
>>81です。すみません、なんかポインタに対する誤認識があったようです。
出直してきます

93 :デフォルトの名無しさん:2009/02/20(金) 19:58:27
ポインタ関係なくない?
ただのスコープの話じゃん

94 :デフォルトの名無しさん:2009/02/20(金) 20:00:34
板杉

95 :デフォルトの名無しさん:2009/02/20(金) 20:19:00
ね−よ

96 :デフォルトの名無しさん:2009/02/20(金) 20:25:58
'ね' - 'よ' = -27

97 :デフォルトの名無しさん:2009/02/20(金) 20:49:23
>>92
(C言語では)引数は常に変数のコピーが渡される。
だからポインタ(型変数)のアドレスを貰わないと、書き換えできない。

風呂で携帯レスはダリア

ところでK&Rの初版だと二次元配列を引数にするときは、
列を省略するな、みたいな事が書いてあったけど、
ANSIってどうなってるの?msc3以降コンパイルしたこと無いからわかるん

98 :デフォルトの名無しさん:2009/02/20(金) 20:53:09
>>97
省略できません

99 :デフォルトの名無しさん:2009/02/20(金) 21:03:00
>>97
C99には int x[][*]
見たいなのがあるよ

100 :℃素人:2009/02/20(金) 23:12:59
>>35さん
遅くなりましたが、ありがとうございました。m(_ _)m
あれから、色々と試してみて理解できました。
それにしても、Cのコンパイラの解釈って・・・orz


101 :デフォルトの名無しさん:2009/02/21(土) 00:02:06
>>100
何を思ったか知らんけどたぶんその感想は的外れだ

102 :476:2009/02/21(土) 00:05:16
最後のラスボスはポインタです
ラスボスを無視して進でこうかと思います

次へ進んでいくと 再帰とか構造体とか中ボスがでてきそうでやです

103 :℃素人:2009/02/21(土) 00:13:20
>>101さん
何が的外れなのでしょうか?
アドレス減算の件でしょうか?
sizeof演算子によって得られるポインタ型のサイズの件でしょうか?
ご指摘お願いします。

104 :デフォルトの名無しさん:2009/02/21(土) 00:17:10
>>80
Cは型にうるさく無いから、何でも適当に融通を効かせて許容してく
れるという誤解が通用しているがこれは絶対に忘れたほうがいい。
C位型にうるさい言語は無い。
型が間違っている場合は処理系に強く依存した
*勝手な解釈で*キャストして稀に致命的な結果をもたらすコードを
平然と吐く。それがたまたま幸運な方向にいくことが多いから
上記のような誤解が発生する。

残念ながら処理系によっては
#define NULL 0
としているものがあるが
#define NULL ((void*)0)
が正しい。
if( p==((void*)0))は期待した通り動作するだろう。
しかし
if( !p)は
if( !((int)p) )という意味になるが、NULLのint変換値が0でない処理系では
全く期待した動作にはならない。

105 :デフォルトの名無しさん:2009/02/21(土) 00:22:42
NULLのint変換値が0でない処理系ってどんなのがあるの?

106 :デフォルトの名無しさん:2009/02/21(土) 00:24:19
裏ボスは関数ポインタ

107 :デフォルトの名無しさん:2009/02/21(土) 00:28:52
NULLはANSIで0に決められていたような

108 :デフォルトの名無しさん:2009/02/21(土) 00:30:35
>>104
それはおかしい。
!pとp==((void*)0)は同じ結果になる。さらに、p==0でも同じだ。もちろんNULLの表現が0でなかったとしても。
(void*)0でもただの0でも、この場合、pと同じポインタ型に変換される決まりで、
整数定数の0をポインタに変換すれば、ヌルポインタになる。

だから#define NULL 0も問題ない。
((void*)0)にする理由としては、ポインタでないintやcharに対して使おうとするアホを吊るしあげるためのほうが大きい。

109 :デフォルトの名無しさん:2009/02/21(土) 00:33:39
>>104

5.3:
ポインターがヌルポインターでないかどうかのテストの省略形「if(p)」は有効なのか?
ヌルポインターの内部表現が0でない場合はどうなるのか。

A:
C言語が式のブール値を必要とする場合(if、while、forやdo文において、
また&&、||、!、?:演算子と共に使う場合)、0と比較して等しい場合は偽の値が産み出され、
その他の場合は真が産み出される。すなわち
if(expr)
と書いたらいつも、「expr」がどんな式かにかかわらずコンパイラは必ず
if((expr) != 0)
と書かれたように基本的には動作する。ポインター式「expr」をpに置き換えると、
if(p) は if(p != 0)と同じ
ということになる。比較をするので、コンパイラは(式では現れれないが)0がヌルポインターを表していると判断して
正しいヌルポインターの値を使う。インチキはない。コンパイラはこのように動き、どちらの式についても同じコードを産み出す。
ポインターの内部表現は関係「ない」。

論理否定演算子!は以下のように記述することができる。
!expr は基本的に (expr)?0:1 と同じ あるいは、((expr) == 0) と同じ
これから以下の結論が得られる。
if(!p) は if(p == 0) とおなじ。
if(p)のような"省略形"は、文法的には正しいけれど、よくない書き方であると考える人もいる
(よい書き方であると考える人もいる。質 問17.10を参照)。

http://www.kouno.jp/home/c_faq/c5.html

110 :デフォルトの名無しさん:2009/02/21(土) 00:34:32
int==ptr

ptr==int
もptrに換算して比較される?
逆だろ?

111 :デフォルトの名無しさん:2009/02/21(土) 00:37:06
>>110
Cではポインタが来ると考えられる場所に整数定数0を書いたら必ずヌルポインタに置き換わる。
換算される=内部表現が0のポインタがヌルポインタなのではない。

112 :デフォルトの名無しさん:2009/02/21(土) 00:38:40
皆Cにはいろんなバリエーションがあるようですなw

113 :デフォルトの名無しさん:2009/02/21(土) 00:40:17
基本的に変なのは104だけじゃね?

114 :デフォルトの名無しさん:2009/02/21(土) 00:41:18
マイナー環境ならコンパイラを信じないほうがいいかもしれないけどな

115 :デフォルトの名無しさん:2009/02/21(土) 00:42:12
>>113
>>105もおかしい
>>107はちょっと古い

116 :デフォルトの名無しさん:2009/02/21(土) 00:42:29
>>104
NULLは整数の0と等しい。たとえNULLのビット表現がALL0でなくても、だ。

117 :デフォルトの名無しさん:2009/02/21(土) 00:42:53
#define NULL ((void*)(-1))
って処理系みたことあるぞ

118 :デフォルトの名無しさん:2009/02/21(土) 00:44:42
>>117
そりゃそいつがANSI準拠でないというだけの話。

ちなみに、規格合致したければ、Cのソースコード上は0にしておいて、
コンパイラの中でよろしくやってくれるようにしないといけない。

119 :デフォルトの名無しさん:2009/02/21(土) 00:46:00
>117
NULLの定義は処理系独自の実装でもよいことになっているので、そういうこともありえる
しかしそのような処理系であっても、NULL==0は真にならなければ規格違反になる。


120 :デフォルトの名無しさん:2009/02/21(土) 00:48:01
C99/C++ では NULL は処理系定義だからな

121 :デフォルトの名無しさん:2009/02/21(土) 00:49:04
(int)(void*)(-1)==0となる処理系だったという話ね

122 :デフォルトの名無しさん:2009/02/21(土) 00:58:02
>>121
間違っている。ヌルポインタをintにキャストしたらその式が真になる保障はない。
もう一度説明しよう。比較や代入でポインタ式が必要とされる場所に整数定数0を書いたら、
コンパイラはそれをヌルポインタ値に置き換える。
だからもし(void*)(-1)がヌルポインタとなる処理系があったとしたら、
(void*)(-1)==0 は真になる。しかしその前にヌルポインタをintにキャストしてしまったら、
このコンパイラによる置き換えは発生しない。恐らく結果は真にならないだろう。

123 :デフォルトの名無しさん:2009/02/21(土) 01:00:17
ヌルポインタってなぁに?

124 :デフォルトの名無しさん:2009/02/21(土) 01:01:46
>>123
絶対に、どんなオブジェクトも関数も指し示していないことが保障されている特別なポインタの値


125 :デフォルトの名無しさん:2009/02/21(土) 01:02:40
って1つかな?

126 :デフォルトの名無しさん:2009/02/21(土) 01:06:32
値が1つかな、という意味で質問しているならそうじゃない
Windowsだと0x00000000から0x0000FFFFまでがNULL

127 :デフォルトの名無しさん:2009/02/21(土) 01:06:57
>>125
ある型についてのヌルポインタ値はひとつしかない(でないと比較ができない)
型ごとにヌルポインタ値があるかどうかは未規定

128 :デフォルトの名無しさん:2009/02/21(土) 01:09:23
コンパイラが保証するのか、ライブラリ作成者たちが厳守する
という意味での保証なのかってことだろな

129 :デフォルトの名無しさん:2009/02/21(土) 01:10:19
>>126
何でそんなにあるんだろう。
それなら0xFFFFFFFFから0xFFFF0000もNULLにすればいいのにね。

130 :デフォルトの名無しさん:2009/02/21(土) 01:10:26
どうせこんなとこで議論したところで信頼性0なんだからやめちゃえばいいのに

131 :デフォルトの名無しさん:2009/02/21(土) 01:11:24
>>126
ヌルポインタとはまた別なものでは、それ

132 :デフォルトの名無しさん:2009/02/21(土) 01:14:05
>130
>109にソースまで出ているのに何を言っているんだ

133 :デフォルトの名無しさん:2009/02/21(土) 01:18:12
>>132
さすがに >>109は有名じゃないのか?w

134 :デフォルトの名無しさん:2009/02/21(土) 01:18:43
お前らほんとNULLの話好きだなwww

135 :デフォルトの名無しさん:2009/02/21(土) 01:18:58
C FAQを知らん奴はいないだろ

136 :デフォルトの名無しさん:2009/02/21(土) 01:35:22
ぬるぽ

137 :デフォルトの名無しさん:2009/02/21(土) 01:39:15
ッガ

138 :デフォルトの名無しさん:2009/02/21(土) 01:47:20
>>129
int *p = NULL;なのにp[1]のようなことをやるおっちょこちょいなプログラムのためということが、
確かAdvanced Windowsに書いてあった。
だけどこれまで全部NULLというのは無理があると思う。

139 :デフォルトの名無しさん:2009/02/21(土) 01:50:06
>>138
いや、だから、p[-1]とかやるおっちょこちょいのために
0xFFFFFFFFから0xFFFF0000もNULLにした方がいいだろ?

140 :デフォルトの名無しさん:2009/02/21(土) 01:53:42
さすがにそれはお茶目過ぎじゃないのか
NULLポインタに代入するだけじゃなくindexまで…

141 :デフォルトの名無しさん:2009/02/21(土) 01:55:59
ヌルぽが1つも無い処理系もあり得る。
それでもNULLは定義されている。

142 :デフォルトの名無しさん:2009/02/21(土) 02:19:55
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec * 1000 + (double)tv.tv_usec * 1e-3;

このときreturnで返ってくる値の単位がよくわかりません


143 :デフォルトの名無しさん:2009/02/21(土) 02:22:00
ぼくにもよくわかりません

144 :デフォルトの名無しさん:2009/02/21(土) 02:40:51
常識的に考えてミリ秒だろ。

145 :デフォルトの名無しさん:2009/02/21(土) 02:41:57
僕に分からないコード書いて?

146 :デフォルトの名無しさん:2009/02/21(土) 03:12:32
「関数ポインタを、シグネチャの違う関数ポインタへキャストして実行」ということをやってしまってもいいのかな

以下のようなコードで実験してみたところ、エラーとかにはならないみたいですが。危険なのかな。
void sub(int i, int i2)
{
printf("%d\n", i);
printf("%d\n", i2);
return;
}
int main(int argc, char *argv[])
{
int (*sub2)(int) = (int (*)(int)) sub;

printf("%d\n", sub2(8));
return 0;
}

//// 出力結果
8 (←正常な値が取れてる)
29987717
9

147 :デフォルトの名無しさん:2009/02/21(土) 03:21:06
さすがに引数の数(とそれぞれのサイズ)が違うのを呼ぶのはまずいだろ。
引数がレジスタ渡しだったり、逆順に評価していたり、引数のポップを呼ばれた側でやるような実装だったら、動かない可能性大。
引数の数(とそれぞれのサイズ)が同じか、ないやつなら、問題少なそうだが、それとて処理系依存だったような気がする。

148 :デフォルトの名無しさん:2009/02/21(土) 03:41:42
typedef struct {
// 略
} S1;
typedef struct {
// 略
} S2;
S1 *sub(S1 *arg1, S1 *arg2);

だとして、こいつを
S2 (*sub2)(S2 *, S2 *) = (S2 (*)(S2 *, S2 *))sub;
ならありですかね?。

149 :デフォルトの名無しさん:2009/02/21(土) 03:55:02
>>148
関数ポインタのキャストは禁止

てゆーかそんな変換になにを望んでるんだ?

150 :デフォルトの名無しさん:2009/02/21(土) 04:31:23
あるソフトをLinuxに移植してて必要になった

151 :147 :2009/02/21(土) 04:43:00
いやwindowsっす。
関数ポインタのキャストが許されるなら、関数を他のモジュールにエクスポートする際にちと便利になる(引数をいちいちキャストせずに関数ポインタだけキャストすればすむ)状況があったのですが、禁止がならしかたないですね。
ありがとうございました。


152 :デフォルトの名無しさん:2009/02/21(土) 07:34:59
C言語初心者です。 超初心者向けの参考書を読んだことがある程度です。
仕事で組み込みマイコン向けのC言語のプログラムを書かないといけなくなりました。
先輩の元ソースを修正するだけなのですが、その元ソースの動作が理解できません。

C言語の逆引き辞典のようなもので、お勧めの書籍はないでしょうか?
元ソースを解析できれば何とかなりそうなのですが。


153 :デフォルトの名無しさん:2009/02/21(土) 08:55:28
処理系によっては適当に引数を補って正しく呼んでくれるだろ
>>関数ポインタ

154 :デフォルトの名無しさん:2009/02/21(土) 09:09:50
getchar() 一文字読み込む
putchar(c) 一文字出力する
gets,getc,putcとの違いをおしえてください。
混乱してきました。

155 :デフォルトの名無しさん:2009/02/21(土) 09:23:07
処理系依存


以上

156 :デフォルトの名無しさん:2009/02/21(土) 09:25:21
>>154
man getchar
man putchar
man gets
man getc
man putc

ttp://www.linux.or.jp/JM/index.html

157 :デフォルトの名無しさん:2009/02/21(土) 09:26:34
>>135
処理系依存×
プログラマ依存○

158 :デフォルトの名無しさん:2009/02/21(土) 09:32:56
>>153
「処理系」とかいう便利な小人さんでも存在するのか?

159 :デフォルトの名無しさん:2009/02/21(土) 09:43:55
一杯あるじゃん

160 :デフォルトの名無しさん:2009/02/21(土) 09:47:16
いっぱいあると言いながら一例も例示できない奴ってたまにいるよな。

161 :デフォルトの名無しさん:2009/02/21(土) 10:09:19
存在するか? -> 一杯ある
態々例を挙げる必要は無い

162 :デフォルトの名無しさん:2009/02/21(土) 10:10:49
いっぱいあると言いながら一例も例示できない奴ってたまにいるよな。

163 :デフォルトの名無しさん:2009/02/21(土) 10:27:31
Cの規格は最大公約数的平均とまではいかないが、重心といった
ところだろ。

164 :デフォルトの名無しさん:2009/02/21(土) 10:30:30
グローバル変数について質問です。

関数の外でint test=50;と定義したら、testは静的領域に確保されて、
そのときstatic宣言するとファイル内にスコープが限定されて、
他のファイルでextern宣言するとそのファイル内で使える、
であってますか?

165 :デフォルトの名無しさん:2009/02/21(土) 10:30:36
数学風の用語使うなら数式で書いてよ。言葉だけだと意味分からんから。

166 :デフォルトの名無しさん:2009/02/21(土) 10:32:23
>>164
static付けたら外部参照できないよ。

167 :デフォルトの名無しさん:2009/02/21(土) 10:40:53
過去と未来ではあってないだろうな

168 :デフォルトの名無しさん:2009/02/21(土) 12:59:53
>>153
基本的にそりゃコンパイラのソース読まないと判断出来ないな。
少なくとも俺はマニュアルにそんな記述があるコンパイラは見たことがない。

169 :デフォルトの名無しさん:2009/02/21(土) 13:02:05
そういう君はやがてそういうコンパイラを書くだろう

170 :デフォルトの名無しさん:2009/02/21(土) 14:39:22
関数ポインタの配列を使って関数呼び出しすると実際に呼び出している関数名がすぐには分からなくてデバッグする際に余計に時間がかかるので、
関数ポインタの配列を使った関数呼び出しをするよりもswitch文で呼び出す関数を分岐した方が保守性がよいので関数ポインタの配列を使った関数呼び出しは
するべきではないと思うの

171 :デフォルトの名無しさん:2009/02/21(土) 14:42:40
>>170
まともなデバッガ使え

172 :デフォルトの名無しさん:2009/02/21(土) 14:45:33
グローバル変数を使うのと、あるファイルに実態が書かれたstatic変数をポインタを介してプログラム全体から利用できるようにするのとでは
前者の方がマシだと思うの。前者だとグローバル変数を読み書きする変数名は実態そのものだからすぐ発見できるが後者だと実態に読み書きしている
変数名がばらばらになりがちでどこで読み書きしているかわけわかめになりがち。

173 :デフォルトの名無しさん:2009/02/21(土) 14:46:18
switch文だと、似たようなコードが延々と並ぶわけだろ
ろくなことにならない
関数ポインタ使って1行で済むなら、そっちの方がはるかにいい



174 :デフォルトの名無しさん:2009/02/21(土) 14:55:54
>>172
まともなデバッガ使え

175 :デフォルトの名無しさん:2009/02/21(土) 15:05:18
プログラミングってデバッガやエディタの習熟度によって記述能力が変わるものなんだな

176 :デフォルトの名無しさん:2009/02/21(土) 15:13:46
つーか
>>172
はグローバル変数がなんでだめなのかわかってないんじゃねーの?
後者もグローバル変数の使用で生じる害と同じことが起こるだろ


177 :デフォルトの名無しさん:2009/02/21(土) 15:14:12
関数ポインタはコールバックに使うことが多いだろ。

178 :デフォルトの名無しさん:2009/02/21(土) 15:24:47
グローバル変数は使い方次第なので好きに使えばいいんだけど、
>>172 の問題は、extern で受ける変数名がばらばらってとこだろう
そんなことするからおかしなことに

179 :デフォルトの名無しさん:2009/02/21(土) 15:26:06
>>170
>>172
そういったのはすべて対症療法よ。
根本療法じゃないんで。念のため。
患者さんによって違うわ

180 :デフォルトの名無しさん:2009/02/21(土) 15:31:00
>>178
いや、素直に読むと モジュール内から static変数のアドレスを渡す関数化なんか用意して
外部モジュールでハンドリングする事を想定した文書だ

困った用法を最悪の形で実装した例だな。

181 :デフォルトの名無しさん:2009/02/21(土) 15:36:09
Setペケペケ/Getペケペケ
なんてのもダメなわけね

182 :デフォルトの名無しさん:2009/02/21(土) 16:04:38
setter/getterはダメなオブジェクト指向の見本でしょ


183 :デフォルトの名無しさん:2009/02/21(土) 16:09:10
>>182
オブジェクト指向にはついていけなかったのか・・・

184 :デフォルトの名無しさん:2009/02/21(土) 16:17:10
グローバル変数がめちゃくちゃに数が増えました。名前が付いたもの
だけで10000個以上あります。
整理しろと言われました。(ただし数は減らせません)
どのようにすればいいでしょうか?

185 :デフォルトの名無しさん:2009/02/21(土) 16:27:11
構造体に全部つっこめ

186 :デフォルトの名無しさん:2009/02/21(土) 16:27:50
・諦める
・泣きつく
・せめて構造体に放り込む

187 :デフォルトの名無しさん:2009/02/21(土) 16:29:56
>>184
複数プロセスに分割する、
structをネストして階層化する等いろいろあるだろ

188 :デフォルトの名無しさん:2009/02/21(土) 16:32:05
べったり千個の変数を管理できる能力を生かす仕事は他にいくらでもあると思う。

189 :デフォルトの名無しさん:2009/02/21(土) 16:35:26
>>184
とりあえず static にしてみろ。

190 :デフォルトの名無しさん:2009/02/21(土) 16:36:00
>>189
え?

191 :デフォルトの名無しさん:2009/02/21(土) 16:36:00
>>188
あんたは先ず、眼科に行く必要がありそうだな。

192 :デフォルトの名無しさん:2009/02/21(土) 16:39:50
「整理しろ」って文言で何を要求しているかも分からねーよ

193 :デフォルトの名無しさん:2009/02/21(土) 16:43:11
gval[10000]


194 :デフォルトの名無しさん:2009/02/21(土) 16:51:40
10000個をまともに整理するのは無茶だ。
とりあえずstaticにして関数を通じて操作させるようにして
モジュール性を持たせるのがせいぜいだろう。

195 :デフォルトの名無しさん:2009/02/21(土) 17:07:03
なるほど

196 :デフォルトの名無しさん:2009/02/21(土) 17:08:16
いやいや・・・

197 :デフォルトの名無しさん:2009/02/21(土) 17:11:37
そのグローバル変数を全て新規に作ったソースファイルの中にstaticをつけてぶちこんでそれぞれにゲッターセッターを用意して、
操作してる部分を全てゲッター、セッターに変更することにどれほどの意味があるのだろう。
グローバル変数がグローバル関数もしくはグローバルオブジェクトになるだけじゃね

198 :デフォルトの名無しさん:2009/02/21(土) 17:17:38
少なくともブレークポイントは置けるようになる

199 :デフォルトの名無しさん:2009/02/21(土) 17:18:41
>>198
???

200 :デフォルトの名無しさん:2009/02/21(土) 17:19:17
ゲッタセッタにブレークポイントを置けるようになるということだが

201 :デフォルトの名無しさん:2009/02/21(土) 17:39:59
それは変数の監視と変わらなくね?

202 :デフォルトの名無しさん:2009/02/21(土) 17:41:24
「触わんなボケ」や「無茶言うなボケ」機構が有ると無いとじゃ大違いって事が判らんのだろうな

203 :デフォルトの名無しさん:2009/02/21(土) 17:51:50
なるほど

204 :デフォルトの名無しさん:2009/02/21(土) 18:16:09
入門書一冊終わったばっかりのカスですが
ビット演算子(&、|、^、<<)について処理自体はシンプルなので理解できたと思うのですけど
実際どんな場面で使用されるのかピンと来なくて消化できた気がしません・・・
どんな場面で使用するとその有用性が理解できるかどなたかご教授願います

205 :デフォルトの名無しさん:2009/02/21(土) 18:23:46
フラグ

206 :デフォルトの名無しさん:2009/02/21(土) 18:24:59
IPアドレスとか、0x000F&を取れば最後の255の部分がわかったり
true colorの番号を赤緑青に分解したり
^を使えば黒<->白になるので背景と必ず逆の色が指定できて便利だったり

207 :デフォルトの名無しさん:2009/02/21(土) 18:33:03
ビットフラグって便利なの?
ただのメモリ節約とかそういう感じ?

208 :476:2009/02/21(土) 18:39:25
テトリス作りたいんですが。
再帰使うと聞いた事あるんですが、画面をクリアするってききましたが。
やっぱりポインタができてないとテトリスはつくれないんですか?
あと構造体

209 :デフォルトの名無しさん:2009/02/21(土) 18:41:22
>>206
遅レスすみません
特殊な状況(あくまで自分の視点)で使うことが有るんですね
ありがとうございました

210 :デフォルトの名無しさん:2009/02/21(土) 18:41:43
作るだけならポインタできなくても大丈夫
それよりもアルゴリズム考えるの頑張れ

211 :476:2009/02/21(土) 18:48:26
210さん 
アルゴリズムの本もってます
アルゴリズム事典 数学的で難しい事ばっかりかかれてます
なんか頑張れっていわれるとうれしいですありがとうございます。
CUI RPGでマップ表示までできます 後主人公うごかせました
ですが壁とか通り抜けたりしました。RPGとかの壁にぶつかったとき壁をすりぬけないとか
そういう判定とかのってるページありますか?



212 :デフォルトの名無しさん:2009/02/21(土) 18:59:07
そういう事はテトリス作ってから言え

213 :デフォルトの名無しさん:2009/02/21(土) 19:02:08
CUI RPG よりパックマンの方が妥当な気がする

214 :デフォルトの名無しさん:2009/02/21(土) 19:20:16
足踏みループアクションから攻撃アクションみたいな切り替え方のうまい方法がわからん


215 :476:2009/02/21(土) 19:42:31
CUI RPGのほうが簡単そうなんですが
パックマンはレベル高そうです
もし私が一通りファイルの扱いや構造体を覚えたらどんなゲームを作るのがおすすめですか?
簡単なアルゴリズムのゲームなどあったら教えてくださいお

216 :デフォルトの名無しさん:2009/02/21(土) 19:44:46
シューティング

217 :デフォルトの名無しさん:2009/02/21(土) 19:44:54
オセロはどうだろうか?

218 :476:2009/02/21(土) 19:56:42
オセロむずかしそうだしってゆうか石取りゲームにしようかとおもいましたが
石取りゲームとか頭すごいつかいそうなのでちょっとやです
シューティングは楽しそうです シューティングとオセロのほかにありますか?

219 :デフォルトの名無しさん:2009/02/21(土) 19:58:32
クイズつくって満足してろ

220 :デフォルトの名無しさん:2009/02/21(土) 20:02:07
>>218
それ位も作れないならやめろ

221 :デフォルトの名無しさん:2009/02/21(土) 20:02:18
>>218
スレ違い

いい加減ウザいよお前。

222 :デフォルトの名無しさん:2009/02/21(土) 20:02:47
最初は○×ゲームくらいのものを作った方がいい

223 :デフォルトの名無しさん:2009/02/21(土) 20:17:46
ゲ製板に段階学習スレがあるからそこでレベル1から順に作ればいい
それができないなら言語そのものの学習が上手く言ってないから
勉強しなおし
ちなみにテトリスはHSP(ポインタや構造体がなく、再起数にも制限がある)でも
作れる

224 :デフォルトの名無しさん:2009/02/21(土) 21:38:42
ターン制ゲームのほうが簡単ですか?


225 :デフォルトの名無しさん:2009/02/21(土) 21:43:43
多分知識不足を主因とするネタの空振りなんだろうが

うざい
マスかいて寝ろ

226 :デフォルトの名無しさん:2009/02/21(土) 22:36:31
>>184
先頭に、/* Copyleft. you are freelly modify, or rewrite, .... */ とか書いて、インターネットやnyに放流。
有用なソフトなら、誰かが改変、改良してくれるだろうから、1年後に捕獲、回収。
クズソフトなら、書いた奴が激しく責められ、なぜだめなのか、もうどうすることもできないのか、
などコメントされるだろうから、それを、そっと他人のふりして、上司に見せる。

227 :デフォルトの名無しさん:2009/02/21(土) 22:45:07
>>224
はい。

228 :デフォルトの名無しさん:2009/02/21(土) 22:51:25
総当りでコードを生成して先頭に、/* Copyleft. you are freelly modify, or rewrite, .... */ とか書いて
インターネットやnyに放流するプログラムを作ればそのうち著作権なんて馬鹿らしくなってくるんじゃないでしょうか?


229 :デフォルトの名無しさん:2009/02/21(土) 23:13:18
Copyleft. you are freelly modify, or rewrite

この英語は釣りですか?

230 :デフォルトの名無しさん:2009/02/21(土) 23:19:12
Copyleft - All rights reversed.

231 :デフォルトの名無しさん:2009/02/22(日) 00:01:23
お前ら頑張ってくれ!!!!!!
東京大学プログラミングコンテスト2008
http://www.utpc.jp/2008/

232 :デフォルトの名無しさん:2009/02/22(日) 00:08:11
>>207
ビット計算は速い。
例えば最短ルートを探索する問題で32bitないし64bitで状態を記述してビット計算で解析する方が
普通に配列つくってループまわすよりダンチに速い。
もちろん単純なビット計算で状態遷移できるように工夫することが前提な。
ビット計算をループで回しとったら(それでも配列より速いかもしれんが)あんま効果ないで。

233 :デフォルトの名無しさん:2009/02/22(日) 00:09:30
ないで。

234 :デフォルトの名無しさん:2009/02/22(日) 05:16:59
>>232
ループ回す場合とループ回さない場合、ループ回さない方が速い
って言ってるだけでビット演算が速いことになってない。

235 :476:2009/02/22(日) 10:46:40
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p[][2]={
{"test","up"},
{"gohan","ge"},
{"",""}
};
int i;
char u[80];
gets(u);
for(i=0; *p[i]; i++)
{
if(!strcmp(u,p[i][0]))
printf("%s is %s\n",u,p[i][1]);
}
return 0;
}

のfor(i=0; *p[i]; i++)こなんですが*p[i][0]だとうまく動くんですが
*p[i]だけだとSegmentation faultとでてしまいます
*p[0]は先頭の*p[0][0]と同じだと思うんですが。
Segmentation faultが出る理由はなんですか?
教えてください

236 :デフォルトの名無しさん:2009/02/22(日) 10:50:33
**p[i]


237 :デフォルトの名無しさん:2009/02/22(日) 10:50:54
char *p[][2]={ → char p[][2]={

238 :デフォルトの名無しさん:2009/02/22(日) 10:53:24
>>235
だーら、typedef覚えてからにしろっつっただろ〜

239 :デフォルトの名無しさん:2009/02/22(日) 15:26:25
相手すんな

240 :デフォルトの名無しさん:2009/02/22(日) 15:57:46
>>237
476よりバカがいたw

241 :デフォルトの名無しさん:2009/02/22(日) 17:19:56
>*p[0]は先頭の*p[0][0]と同じだと思うんですが。
違います

242 :デフォルトの名無しさん:2009/02/22(日) 17:42:31
みんな476大好きだなw

243 :デフォルトの名無しさん:2009/02/22(日) 18:38:17
>最後のラスボスはポインタです

244 : ◆YjsWqh8B4w :2009/02/22(日) 19:23:00
#include <stdio.h>

int main(int void)
{
int n1 = 0, i;
int n2 = 0, a;
double ax, b;
double ay;
for( i = 0; i <100000000 ; i++ )
{
double ax = ( ((double)rand() / 32767) * 100.0);
double ay = ( ((double)rand() / 32767) * 100.0);
a = (ax-50.0) * (ax-50.0) +(ay-50.0) * (ay-50.0);
if( a <= 2500.0 ){
n1++;
}else{
n2++;
}
}
b=4*n1/(n1+n2)
printf("πの値は %lf\n", b);
return 0;
}

長文すみません。
縦横100の四角形の中に半径50の円が入った場合に、
モンテ法を用いて、円周率πを求めるプログラムを作ったのですが、
実行結果がπ=3.88942等の円周率と離れた数値になってしまいます。
このプログラムの内容をなるべく変更しないで正しい値に近い円周率を出すためには、
どうしたらいいでしょうか。
協力お願いします。


245 :デフォルトの名無しさん:2009/02/22(日) 19:29:08
これ宿題スレのじゃねーか?

246 :デフォルトの名無しさん:2009/02/22(日) 19:31:57
しかもちっともCを理解していない事がよくわかるなw

247 :デフォルトの名無しさん:2009/02/22(日) 19:33:23
>>244
試しにすべてのポイントで計算して見てごらん

248 :デフォルトの名無しさん:2009/02/22(日) 19:41:07
>>244
#include <stdio.h>

int main(int void)
{/*
int n1 = 0, i;
int n2 = 0, a;
double ax, b;
double ay;
for( i = 0; i <100000000 ; i++ )
{
double ax = ( ((double)rand() / 32767) * 100.0);
double ay = ( ((double)rand() / 32767) * 100.0);
a = (ax-50.0) * (ax-50.0) +(ay-50.0) * (ay-50.0);
if( a <= 2500.0 ){
n1++;
}else{
n2++;
}
}
b=4*n1/(n1+n2)
printf("πの値は %lf\n", b);
*/
printf("πの値は %f\n", 3.14159265358979);
return 0;
}

こんなかんじでどうだろうか

249 :デフォルトの名無しさん:2009/02/22(日) 19:45:40
<stdlib.h>もインクルードしろ。
aもdoubleにしろ。
32767とマジックナンバーを書くな。RAND_MAX使え。
b = の右側の4を4.0にしろ。

250 :デフォルトの名無しさん:2009/02/22(日) 19:53:01
#include <stdio.h>
#include <math.h>

int main(int void)
{
int n1 = 0, i;
int n2 = 0, a;
double ax, b;
double ay;
for( i = 0; i <100000000 ; i++ )
{
double ax = ( ((double)rand() / 32767) * 100.0);
double ay = ( ((double)rand() / 32767) * 100.0);
a = (ax-50.0) * (ax-50.0) +(ay-50.0) * (ay-50.0);
if( a <= 2500.0 ){
n1++;
}else{
n2++;
}
}
b=4*n1/(n1+n2);

if(b != 3.14159)
{
b = acos(-1);
}
printf("πの値は %lf\n", b);

return 0;
}

251 :デフォルトの名無しさん:2009/02/22(日) 19:54:49
プログラムだけじゃなくて諮問もあるんだろ
わからんことは聞いておいた方がいいんじゃないか?




252 : ◆YjsWqh8B4w :2009/02/22(日) 20:36:36
>>249
>>250 ありがとうございます。
プログラムの中のacos(-1)の部分が良くわからないのですが …
なぜbがπでない場合そうするのでしょうか??

253 :デフォルトの名無しさん:2009/02/22(日) 20:58:24
b = 4.0*arctan(1);
でもいいよ

254 :デフォルトの名無しさん:2009/02/22(日) 21:30:51
>>int n1 = 0, i;
>>int n2 = 0, a;

なんかさ、相関のないものをこういう風にまとめるのって
頭おかしいんじゃないかと思う

ちなみに、プログラムがおかしい原因は intとdoubleの混在。
rand()をdoubleでキャストしたときの知恵を他にも回せ

255 :デフォルトの名無しさん:2009/02/22(日) 21:49:34
皮肉も通じないとは
(自分も含めて)ゆとりは高校でarcsinとかを習わないからなあ
一言、sinの逆関数ですよって説明するだけなのになぜ省かれたのだろう

256 : ◆YjsWqh8B4w :2009/02/22(日) 21:57:19
ありがとうございました。


257 :デフォルトの名無しさん:2009/02/22(日) 22:31:17
sinやarcsinなんて知識に過ぎない。少なくともプログラミングの世界では。
モンテカルロ法を議論する場合は三角関数の一定以上の学識は必須。
したがってモンテカルロ法がプログラミングの例題として適しているかどう
か今一度議論されてしかるべきということになる


258 :デフォルトの名無しさん:2009/02/22(日) 22:51:31
しかしそれはこのスレの範疇ではない

259 :デフォルトの名無しさん:2009/02/22(日) 22:53:41
2年くらいC使ってるけどモンテカルロ法なんて聞いたことも無い

260 :デフォルトの名無しさん:2009/02/22(日) 22:59:28
数値計算しなければ使わないかもな

でも2年も使ってれば一度くらいお目にかかるだろ

261 :デフォルトの名無しさん:2009/02/22(日) 23:09:38
いいとこの学校だと、前期がC言語入門で後期は数値解析だもんな・・・
オレんとこはオバカ学校だったけど、時間配分半分とか見ると、愕然とするな。

262 :デフォルトの名無しさん:2009/02/22(日) 23:13:32
なんか生徒がいつ発狂するかテストしてるみたいなカリキュラムだなw

263 :デフォルトの名無しさん:2009/02/22(日) 23:43:58
MCくらいなら元になる数学と併せてマスターするのに1週間かからないような
専攻が物理だったからかなぁ

264 :デフォルトの名無しさん:2009/02/23(月) 00:05:40
うちは1年で前期パソコン入門後期C言語、2年でフォートランと数値解析、3年で物理シュミレーションだったな


265 :デフォルトの名無しさん:2009/02/23(月) 00:35:17
30分で深海100mまで巣潜りしてくるようなカリキュラムだな

266 :デフォルトの名無しさん:2009/02/23(月) 01:23:56
このスレ的に高専ってどうなの?

267 :デフォルトの名無しさん:2009/02/23(月) 01:25:16
どうって?

268 :デフォルトの名無しさん:2009/02/23(月) 01:38:34
>>266
無関係

269 :デフォルトの名無しさん:2009/02/23(月) 01:59:45
マクロの問題です。
#define MAKE_AAASTRUCT() AaaStruct a##__COUNTER__
MAKE_AAASTRUCT()を実行すると、自動的にAaaStruct a1, AaaStruct a2, AaaStruct a3,,,となって欲しいのですが、うまくいきません。
どのようにしたら良いのでしょうか、、、

270 :デフォルトの名無しさん:2009/02/23(月) 02:06:22
>>269
マクロは実行するものではなく置換するものであることを忘れないこと。
Cプリプロセッサに変数という概念は無い。
よって置換を行うたびに動作を変えるようなマクロもありえない。
任意個数の異なるオブジェクトの実体が必要なら、メモリを動的に割り当てる方法を試すこと。

271 :269:2009/02/23(月) 02:09:34
ごめんなさい。出来ました。

#define _JOIN( X, Y ) _DO_JOIN( X, Y )
#define _DO_JOIN( X, Y ) X##Y
#define MAKE_AAASTRUCT() AaaStruct _JOIN(a, __COUNTER__)

272 :デフォルトの名無しさん:2009/02/23(月) 02:14:02
>>269
#define MAKE_AAASTRUCT_SUBSUB(COUNTER) AaaStruct a##COUNTER
#define MAKE_AAASTRUCT_SUB(COUNTER) MAKE_AAASTRUCT_SUBSUB(COUNTER)
#define MAKE_AAASTRUCT() MAKE_AAASTRUCT_SUB(__COUNTER__)

273 :デフォルトの名無しさん:2009/02/23(月) 02:19:57
どちらかというとかな〜り邪道なマクロの使い方

274 :デフォルトの名無しさん:2009/02/23(月) 02:33:03
どんだけ特殊な事情なんだ
普通に配列でいいじゃん

275 :デフォルトの名無しさん:2009/02/23(月) 02:33:22
>270が何か勘違いしてるのはいいとして、こういうマクロって何の役に立つの?

276 :269:2009/02/23(月) 02:44:43
マクロのことでCのスレで質問したのですが、本当はC++で使いマクロでした。
適当なブロックの先頭で宣言して、ブロックから外れたらデストラクタが動いてくれるような、あくまで一時的なクラスの名前付けをラクしたかったので、、、

277 :269:2009/02/23(月) 02:45:15
> 使いマクロ -> 使いたいマクロ

278 :デフォルトの名無しさん:2009/02/23(月) 06:56:49

これは酷いパクリ企業!(芸者東京)
ニコニコ動画内のアイデアを無許可で営利目的にソフト作成、販売
 → 元ネタのPV動画を無許可に営利目的で使用
 → ニコニコ動画に無許可に営利目的のソフト宣伝PV動画アップ(しかも酷い原作レイプ)
http://www.nicovideo.jp/watch/sm6206533
http://www.itmedia.co.jp/news/articles/0902/20/news052.html
http://syunei.dip.jp/nico_tech/index.php?%E3%80%8C%E3%81%82%E3%81%AE%E6%A5%BD%E5%99%A8%E3%80%8D%E8%8A%B8%E8%80%85%E6%9D%B1%E4%BA%AC%E9%96%A2%E4%BF%82


279 :デフォルトの名無しさん:2009/02/23(月) 07:37:02
windowsで使用できるメモリアドレス空間の範囲ってどうすれば分かりますか?
プログラムつくって変数にアドレス振る時とか、0x0000000とかだとふれませんよね

280 :デフォルトの名無しさん:2009/02/23(月) 08:01:27
>>279
おまえが振るわけじゃないから、そんなことは考えなくても大丈夫

281 :デフォルトの名無しさん:2009/02/23(月) 10:35:46
大丈夫かどうかじゃなくて「どうすれば分かるか」を、知っている人 に尋ねた。

282 :デフォルトの名無しさん:2009/02/23(月) 10:45:10
何でもかんでも知っている人に聞くより、自分で調べられるようになろうね。

283 :デフォルトの名無しさん:2009/02/23(月) 13:06:31
初心者だとすると、それを知りたいという時点で
すでに問題解決の方向が間違ってる

284 :デフォルトの名無しさん:2009/02/23(月) 13:30:19
Windowsだとことわりがあるだろ?
知りたくもないことまで知らなければならなくなる
状況が時々発生するのがWindows開発
だからWindows開発は初心者向けじゃ絶対にない

285 :デフォルトの名無しさん:2009/02/23(月) 13:33:10
スレ違い
の一言ですむだろう

286 :デフォルトの名無しさん:2009/02/23(月) 13:41:35
>>279
IsBadReadPtr/IsBadWritePtr系APIを使えば?
標準Cライブラリにその手の関数は無いが

287 :デフォルトの名無しさん:2009/02/23(月) 13:43:33
>>279
リンクのMAPを出力すれば大体わかる

288 :デフォルトの名無しさん:2009/02/23(月) 13:52:25
Windows開発やってて、メモリアドレスの範囲を知らない時点で終わっていると思うが

289 :デフォルトの名無しさん:2009/02/23(月) 14:02:10
WindowsのCで、どうやって任意のアドレスに変数を割り当てるのだ?

290 :デフォルトの名無しさん:2009/02/23(月) 14:28:19
メルセンヌツイスタって下位何bitだけ取り出して〜とかでも乱数として使える?


291 :デフォルトの名無しさん:2009/02/23(月) 14:48:37
>>289
API使う

292 :デフォルトの名無しさん:2009/02/23(月) 14:49:31
int x[10][10];
int i;
int *p = x[0]; /* x[0] は、最初のデータへのポインタである。 */
/* だからその型は int * なので、代入できる。 */


293 :デフォルトの名無しさん:2009/02/23(月) 15:00:25
質問です。
要素を変更するプログラムについて、

char array[] = "hoge\n";
array[2] = 'G';

これはOKなのですが、

char *str = "hoge\n";
str[2] = 'G';

はセグメンテーションエラーになります。

何でですか?

294 :デフォルトの名無しさん:2009/02/23(月) 15:02:35
前者はローカルの配列にコピーされるが、後者は書き込めない位置にあるから。

295 :デフォルトの名無しさん:2009/02/23(月) 15:03:26
>>294
ありがとうございました。

296 :デフォルトの名無しさん:2009/02/23(月) 15:24:48
C言語を使うのが楽しいのですが、

297 :デフォルトの名無しさん:2009/02/23(月) 15:34:48
soudesuka

298 :デフォルトの名無しさん:2009/02/23(月) 15:35:51
>>293
BCCだとエラ−にならずに書き換えできたりするんだよな


299 :デフォルトの名無しさん:2009/02/23(月) 15:36:32
>>288
そんなもの知る必要の無い仕事のほうが圧倒的に多いし
少なくともそれはCの言及する範囲の話題ではない

300 :デフォルトの名無しさん:2009/02/23(月) 17:30:38
文字入力(標準入力)の最善策って、

全てscanf("%s",tmp); と受け取って後で処理する事?

301 :デフォルトの名無しさん:2009/02/23(月) 17:35:53
scanfをそのまま用いるよりはfgetsを使った方が良いよ

302 :デフォルトの名無しさん:2009/02/23(月) 17:43:08
>>301

アホ

303 :デフォルトの名無しさん:2009/02/23(月) 17:51:27
色々バグがあって困ってるんですが、

scanf("%d",&a); は文字入れた瞬間にいかれちゃうんで
scanf("%s",&str); ->strを整数や実数へとしてるんですが

scanfはバグが多いと、よく聞きます。
より良い方法や、数値などのより(バグの無い)効率の良い方法とかって、ありますか?

304 :デフォルトの名無しさん:2009/02/23(月) 17:54:38
>>301

305 :デフォルトの名無しさん:2009/02/23(月) 18:06:45
バグが多いというのは適切じゃないけどね、きちんと動く
扱いづらい面が多いだけで

>>303
改行がバッファに残る、バッファオーバーラン等の対処などから、
fgetsしたものをsscanf, atoi, strtol等を使って解析するのが定石

306 :デフォルトの名無しさん:2009/02/23(月) 18:10:49
pthread_createでスレッドを作って、そのスレッドでexec関数を呼びたいんですが、
forkすると、スレッドとプロセス生成でややこしくなります。
マルチスレッドとforkは混ぜるな危険でしょうか?

307 :デフォルトの名無しさん:2009/02/23(月) 18:15:44
forkのすぐあとにexecすればなんとかなるかも

308 :476:2009/02/23(月) 18:18:53
scanfは危険など使わない方が良いと書いてあるのを見かけるんですが
数字などを入れるときはscanf以外の関数はあるんですか?
なぜだめなんですか?

309 :デフォルトの名無しさん:2009/02/23(月) 18:28:19
>>308
wikipediaでscanfを調べてみなさい

310 :デフォルトの名無しさん:2009/02/23(月) 18:30:02
>>307
どういう意味ですか?

311 :デフォルトの名無しさん:2009/02/23(月) 18:33:06
>>310
マルチスレッドでforkするときはいろいろお約束があるけど、
呼んじゃいけない関数を呼ぶ前にexecしてしまえば問題が出ない。

312 :デフォルトの名無しさん:2009/02/23(月) 19:03:45
>>301-305
fgetsって、ファイルだけかと思って、
ファイル入力&読み出しとかめんどくさいし、ゴミも・・・・・

と思ったら、ファイルポインタにstdin指定が出来るんですね。
get〜 にも悩まされずに済みそうです。 ありがとうございました。

313 :デフォルトの名無しさん:2009/02/23(月) 21:13:36
何をどう直せば正常に動くのかわかりません。
最後のprintf文の最初の出力文字を大文字にしたい。
#include <stdio.h>
#include <ctype.h>
main() {
char *fruits[]={"apple", "orange", "kiwi"};
int i;
printf("Suppose that we now have (0) %s, (1) %s, (2) %s.\n",
fruits[0],fruits[1],fruits[2]);
printf("Input 0, 1, or 2: ");
scanf("%d",&i);
*fruits[i]=toupper(*fruits[i]); /*ここがエラー*/
printf("\n%s is your favorite fruit!\n",fruits[i]);
}

314 :デフォルトの名無しさん:2009/02/23(月) 21:22:27
よく見てないけど

char *fruits[]={"apple", "orange", "kiwi"};

char fruits[][300]={"apple", "orange", "kiwi"};
にしたらどうかしら




315 :デフォルトの名無しさん:2009/02/23(月) 21:22:43
>>313
*fruitsは書き換えできないから適当なバッファを用意してコピーしろ
char buffer[256];
strcpy(buffer, fruits[i]);
buffer[0] = toupper(buffer[0]);


316 :デフォルトの名無しさん:2009/02/23(月) 21:32:01
#include <stdio.h>
#include <ctype.h>
#include <string.h>
main() {
char *(fruits[])={strdup("apple"), strdyo("orange"), strdup("kiwi")};
int i;
printf("Suppose that we now have (0) %s, (1) %s, (2) %s.¥n",
fruits[0],fruits[1],fruits[2]);
printf("Input 0, 1, or 2: ");
scanf("%d",&i);
*(fruits[i])=toupper(*(fruits[i])); /*ここがエラー*/
printf("¥n%s is your favorite fruit!¥n",fruits[i]);
}

慣れないうちは()を付けること
格好つけて()を省略してツウぶるのはやめような

317 :デフォルトの名無しさん:2009/02/23(月) 21:33:30
複素数を二つ読み込み、和を求めるプログラムを作っています。
コンパイルも出来て実行も出来るのですが、実行した結果が0.000000+0.000000iとなってしまいます。
どこでミスしているのかわからないので教えてください。よろしくお願いします。
#include<stdio.h>

struct cmplx{
double real;
double imag;
};

void add(struct cmplx c1, struct cmplx c2, struct cmplx s)
{
s.real = c1.real + c2.real;
s.imag = c1.imag + c2.imag;
}

int main(void)
{
struct cmplx c1, c2, s;
puts("Input Two Imaginary Numbers.");
printf("A real:"); scanf("%lf", &c1.real);
printf("A imag:"); scanf("%lf", &c1.imag);
printf("B real:"); scanf("%lf", &c2.real);
printf("B imag:"); scanf("%lf", &c2.imag);

add(c1, c2, s);

printf("Sum = %f + %fi\n", s.real, s.imag);

return 0;
}

318 :デフォルトの名無しさん:2009/02/23(月) 21:33:47
>>316


319 :デフォルトの名無しさん:2009/02/23(月) 21:34:36
strdyoはご愛嬌ということで
あと処理系によってはコンパイルとおらないかも
(ポインタ配列の関数呼び出しによる初期化不可)

320 :デフォルトの名無しさん:2009/02/23(月) 21:34:55
>>317
引数を書き換えても反映されない、
アドレスを渡すとか返り値を使え

321 :デフォルトの名無しさん:2009/02/23(月) 21:37:26
>>317
void add(struct cmplx c1, struct cmplx c2, struct cmplx *s)
{
s->real = c1.real + c2.real;
s->imag = c1.imag + c2.imag;
}

add(c1, c2, &s);

322 :デフォルトの名無しさん:2009/02/23(月) 21:41:10
なんで構造体のポインタだと->なんだ?(言語仕様的な意味で)
*struct.fieldでいい気もするんだが。

323 :デフォルトの名無しさん:2009/02/23(月) 21:41:28
>>317

>>321さんのでもいいけど

struct cmplx add(struct cmplx c1, struct cmplx c2)
{
struct cmplx s;
s.real = c1.real + c2.real;
s.imag = c1.imag + c2.imag;
return s;
}

mainで
s = add(c1, c2);
のほうがいいかな?addが関数っぽいし。

324 :317:2009/02/23(月) 21:45:32
>>320-323
いろいろと助言ありがとうございます。

とりあえず>>323さんのが一番単純なので使わせていただきます。

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

325 :デフォルトの名無しさん:2009/02/23(月) 21:54:30
>>316
( ゚д゚)

326 :デフォルトの名無しさん:2009/02/23(月) 21:58:36
Windowsでは嫌われる

327 :デフォルトの名無しさん:2009/02/23(月) 22:03:16
ソースコードレベルでローカルな名前空間にある構造体を
返すことが

328 :デフォルトの名無しさん:2009/02/23(月) 22:10:56
すれちかもしれないけどここで質問

秀丸のtagファイルを全階層のディレクトリ分、関数もヘッダも一通り作るにはどうすれば?
やはり手動?

329 :デフォルトの名無しさん:2009/02/23(月) 22:14:25
どっちかっつーと>>321の方に慣れといたほうがいいぞ
>>323だと速度遅い
今回の例だと気にするほどではないかもしれないが。

330 :デフォルトの名無しさん:2009/02/23(月) 22:39:09
>格好つけて()を省略してツウぶるのはやめような
これはおk

331 :デフォルトの名無しさん:2009/02/23(月) 22:39:43
逐次コードにシケイン築いてオレ凄いとかふんぞり返る >>329 みたいなのが居るんだよね

332 :デフォルトの名無しさん:2009/02/23(月) 22:43:29
329!=330なんで
念のため

333 :デフォルトの名無しさん:2009/02/23(月) 22:45:20
329は間違ったことを言っているわけではないが
Windows優勢のこの時代においては
という但し書きが必要

334 :デフォルトの名無しさん:2009/02/24(火) 00:39:57
Windowsがどう関係するの?

335 :デフォルトの名無しさん:2009/02/24(火) 00:43:00
t += dt みたいに、文字列の追加連結を

char str[256] = "ABC";
〜処理〜
sprintf(str , "%sDEF" , str);

ってやろうとしたんだけど、うまくいかなです。
どうも、%s読む前にstrが初期化されてる
気がするんだけど、そういう事?

str = strcat(str,"DEF"); が無難?

336 :デフォルトの名無しさん:2009/02/24(火) 00:57:04
strncat()が無難

337 :デフォルトの名無しさん:2009/02/24(火) 00:57:47
strncatを使え

338 :デフォルトの名無しさん:2009/02/24(火) 01:01:04
>>335
sprintf()に渡すバッファと書式のポインタは、他のポインタと同一では
いけないと規格で決まっている。



339 :デフォルトの名無しさん:2009/02/24(火) 01:04:45
char* a = malloc(100);
++a;
free(a);

って問題ある?

340 :デフォルトの名無しさん:2009/02/24(火) 01:08:15
>>336 >>337 >>338
求めてた答え、助かります。
strncatの方がいいのか。thx

341 :デフォルトの名無しさん:2009/02/24(火) 01:09:44
>>339
ある。
即時にクラッシュしないかもしれないが、ヒープが壊れたりしてヒドい
ことになる。


342 :デフォルトの名無しさん:2009/02/24(火) 01:11:36
>>341
特定の実装でどうなるかという話ではなくて、
Cの規格でダメだと決まっているの?

343 :デフォルトの名無しさん:2009/02/24(火) 01:13:34
MANPAGEに書いてた。ありがと。

344 :デフォルトの名無しさん:2009/02/24(火) 01:14:01
>>342
ISO/IEC 9899 で決まってます。




345 :デフォルトの名無しさん:2009/02/24(火) 01:16:41
ある種の仕様の問題が改善されないことを規格で決定するのか?

346 :デフォルトの名無しさん:2009/02/24(火) 01:19:12
strlcatを使え。
なければ作れ。

347 :デフォルトの名無しさん:2009/02/24(火) 01:19:58
std::string::operator+=()でおk

348 :デフォルトの名無しさん:2009/02/24(火) 01:25:11
>ある種の仕様の問題が改善されないことを規格で決定するのか?
そうその通り
free関数は例え引数ポインタがmallocで確保されたメモリブロックを
指していてもそのメモリブロックを解放するような(親切な)
実装をしてはならないことに決まっている...ようだ

349 :348:2009/02/24(火) 01:26:34
>free関数は例え引数ポインタがmallocで確保されたメモリブロックを
>指していてもそのメモリブロックを解放するような(親切な)
>実装をしてはならない

free関数は例え引数ポインタがmallocで確保されたメモリブロックを
指していてもそのブロックの先頭を指していない限り
そのメモリブロックを解放するような(親切な)実装をしてはならない

に訂正

350 :デフォルトの名無しさん:2009/02/24(火) 01:34:05
まじでそんなこと書いてあるのか?
単に未定義なんじゃなくて?

351 :デフォルトの名無しさん:2009/02/24(火) 01:36:45
ふつうそうだろ。
1万円借りたら1万円返す。9千円で済まそうとしてはいけない。


352 :デフォルトの名無しさん:2009/02/24(火) 01:44:20
mallocしたポインタ以外をfreeしたらたぶんダメ、でいいだろ。

353 :335:2009/02/24(火) 01:46:06
>>346
strlcatの使い勝手は分かった。確かにその都度自作関数でも十分価値あるのは理解。

>>347
stringクラスは、C/C++の文字列扱いの不便さ解消してて、すごいとは思ってたんだが
今は、string使うのが当たり前なのか?
細かい作業とか、他人のソースとか結局char配列で文字列を宣言すること多いなら
しばらく、手を出さずにいようかと思ってたんだけど・・・・

354 :デフォルトの名無しさん:2009/02/24(火) 01:46:44
貸したお札のキ番号が異なった場合や硬貨の製造年月日が異なった
場合、例え同一の金額、それ以上の金額であっても受け取ってはならない
と定めているのと似てるなw

355 :デフォルトの名無しさん:2009/02/24(火) 01:48:22
>>354
にてないからw

356 :デフォルトの名無しさん:2009/02/24(火) 02:01:16
お札の番号が違うから受け取れない、って言われたら多分一生返せない。
利子だけが雪だるま式に・・・・
新たな貸金商法ですね?

357 :デフォルトの名無しさん:2009/02/24(火) 02:07:43
strlcatとそのまま自前で作ってもいいけど
移植性を考えたらstrLcatとかちょっと名前変えておいた方がいいよ。

358 :デフォルトの名無しさん:2009/02/24(火) 02:08:19
部屋を貸して返ってきたのが元の部屋9割と隣のおじさんの部屋1割だったら嫌だろ?

359 :デフォルトの名無しさん:2009/02/24(火) 02:08:26
>今は、string使うのが当たり前なのか?
当たり前っちゃ当たり前だけどchar *で間に合うならそれで済ませたほうが簡単
つーかここはCスレだし

360 :デフォルトの名無しさん:2009/02/24(火) 02:11:01
>>358
いやだけど、どういう状況?

361 :デフォルトの名無しさん:2009/02/24(火) 02:14:54
なんか的外れな例えする奴が沸いてるなw

362 :デフォルトの名無しさん:2009/02/24(火) 02:23:35
でも面白い

363 :デフォルトの名無しさん:2009/02/24(火) 02:26:18
でも確保したうちの9割しか解放されないのであれば、
テストとかすぐ終わるプログラムにしか使えないじゃないか。
長時間滞在するデーモンプログラムとかメモリリーク起してえらいことになる。

364 :デフォルトの名無しさん:2009/02/24(火) 02:28:58
reallocを使いまくってるプログラムに似てるかもね。

365 :デフォルトの名無しさん:2009/02/24(火) 02:29:47
>>356
それ、元の分以上には何も返ってこないんですけど(番号の違うものは受け取れないから)、そんな商売に何のうまみが。。。

って、何の話してんの?

366 :デフォルトの名無しさん:2009/02/24(火) 02:32:27
でも、1万円借りて110ドルで返そうとしても型が違って拒否られるよね。
円でキャストしないと。

367 :デフォルトの名無しさん:2009/02/24(火) 02:33:07
ごめん、円でキャストしたら110円しか返さないw

ageてわびます。

368 :デフォルトの名無しさん:2009/02/24(火) 02:34:19
>>366
金の勘定ができない奴に使える詐欺かもね。

369 :デフォルトの名無しさん:2009/02/24(火) 02:34:43
ぶっちゃけプログラミングで一番悩むのってネーミングじゃね?


370 :デフォルトの名無しさん:2009/02/24(火) 02:43:16
あるある

疲れてきたらかなり適当になる

ということで、>>367

//円をドルに換算する
doru en_to_doru(en e,doru d){

}

誰か中身おね

371 :デフォルトの名無しさん:2009/02/24(火) 02:49:51
return e * d;

372 :デフォルトの名無しさん:2009/02/24(火) 02:50:59
中身

{
return Google(e,"を",d,"へ");
}

373 :デフォルトの名無しさん:2009/02/24(火) 02:54:06
ドルに変換するのに、なんで引数にもドルがあるんだよw

374 :デフォルトの名無しさん:2009/02/24(火) 02:55:07
dollar en_to_dollar(int en,int rate){
return en*rate;
}

375 :デフォルトの名無しさん:2009/02/24(火) 02:57:22
呼び出し側でドルに換算するんですね、おkです。


376 :デフォルトの名無しさん:2009/02/24(火) 03:07:07
漢字の識別子が使えればいいのに

377 :デフォルトの名無しさん:2009/02/24(火) 03:26:22
使えるよ、C99から規格でも保証されてる
ただ・・・・・・・・・

378 :デフォルトの名無しさん:2009/02/24(火) 03:30:11
話がずれてる
未定義の一言で済ませればいいのにわざわざ規格として禁止してる意味はなにかってことだろ

379 :デフォルトの名無しさん:2009/02/24(火) 03:30:47
アンカーわすれた
>>351-367

380 :デフォルトの名無しさん:2009/02/24(火) 10:01:14
規格として禁止してるの?

381 :デフォルトの名無しさん:2009/02/24(火) 12:47:23
禁止ってなんだ?

382 :デフォルトの名無しさん:2009/02/24(火) 13:20:48
JISX3010
http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3010



383 :デフォルトの名無しさん:2009/02/24(火) 13:39:50
iostreamよりstdioのほうが使いやすくない?


384 :デフォルトの名無しさん:2009/02/24(火) 14:22:11
>>382
やっぱり未定義としか書いてないな
つーわけで>>348-349は大嘘

385 :デフォルトの名無しさん:2009/02/24(火) 14:36:05
>>344が大嘘で

>>345
>>348-349
はそれを皮肉っただけだろw

386 :デフォルトの名無しさん:2009/02/24(火) 14:39:06
ネットって皮肉が伝わりにくいよなw

387 :デフォルトの名無しさん:2009/02/24(火) 14:43:47
未定義と定義した段階で、改善勧告を出さないという意味になるので
JISの定義は>>349辺りとさほど変わりが無い件について

まぁ free( (void*) ( (char*)malloc(1024)+1) );
がヒープ壊すのをfreeの問題かプログラマの管理の問題かは
議論が分かれるとこだろけどな

388 :デフォルトの名無しさん:2009/02/24(火) 14:46:08
>>387
要求しないのと禁止するのはぜんぜん違うだろ・・・

389 :デフォルトの名無しさん:2009/02/24(火) 14:46:09
>>387
その free は何をしても「問題ない」
未定義の意味わかってるか?

390 :デフォルトの名無しさん:2009/02/24(火) 14:59:53
JISの規格ってのはある時点の現状報告書なのか?

処理系によっては、>>387のfreeは正常に動作し
処理系によってはヒープを壊すなどの障害が発生
だから未定偽

すべての処理系に共通の動作保障が得られている
ものを「定義」すると表現しているようだw

391 :デフォルトの名無しさん:2009/02/24(火) 15:09:42
11.34:
ANSI規格には多くの論点が未定義のまま放置してあることを考えるとぞっとする。
規格の仕事はこれらの問題を標準化することではなかったのか。

A:

C言語は昔からその一部はコンパイラやハードウェアがどう実装されて
どう振る舞ってもいいようになっている。こういうふうにわざとはっきりさせないことで、
コンパイラはありそうもないような状況にまで適切に定義された動作を保証することのために
すべてのプログラムに余計なコードの重荷を背負わせることなく、
よくある状況で効率のいいコードを生成することができる。
よって規格はそれまでに存在した習慣を単に明文化したにすぎない。

プログラミング言語の規格は言語の使用者とコンパイラの実装者の間の条約と考えればいい。
その条約の一部はコンパイラ実装者が提供を約束した機能で、使い手は用意されているものだと思いこんでいい。
しかしながら、別の部分はユーザーが従うと約束した決まりで、実装者は守ってもらえると思いこんでいい。
両方が自分の約束を守るかぎり、プログラムは頑張れば動く可能性がある。
どちらかでも公約を破れば、どんな部分についても確実に動くとは保証できない。


392 :デフォルトの名無しさん:2009/02/24(火) 15:14:57
どんなコンパイラメーカーwもJISとは法的契約を結んでいるわけじゃないです
JISのお墨付きが貰えないというだけでANSIのお墨付きがもらえれば別にいいです

393 :デフォルトの名無しさん:2009/02/24(火) 15:17:42
>>392
一体何について語っているんだ?

394 :デフォルトの名無しさん:2009/02/24(火) 15:28:00
多用されてるというだけでそれぞれ暫定的であった可能性が高いキーワードを
勝手に仕様を定義して固定化してしまうことの負の影響について考えてみよう

395 :デフォルトの名無しさん:2009/02/24(火) 15:30:13
>>394
こっちでやれ

【初心者お断り】ガチ規格準拠C専用スレ Part133
http://pc11.2ch.net/test/read.cgi/tech/1201153965/

396 :デフォルトの名無しさん:2009/02/24(火) 15:45:28
大体にして標準ライブラリと言ったところで、私物に近いものだったのだが
それを勝手に公有物のように扱い動作仕様にまで干渉する人たちって一体...

397 :デフォルトの名無しさん:2009/02/24(火) 16:07:49
規格が気に入らないなら勝手に好きな仕様で処理系をつくればいい
そんなこと誰も禁止していない

398 :デフォルトの名無しさん:2009/02/24(火) 16:11:15
>>396
気に入らない仕様(規格)を独断的に性急に規格にしてしまったから問題なんだろ?

399 :デフォルトの名無しさん:2009/02/24(火) 16:18:20
>>398
ベンダーが明文化する程度に留めて置くべきだったものを、皆でよってたかってどんどん明文化し
挙句の果てには無責任に自分が作ったかのように文法書や教科書まで作って布教してしまう
奴らに怒ってるだけだろ

400 :デフォルトの名無しさん:2009/02/24(火) 16:43:22
怒るのは勝手ですがよそでやってください
ここはそういうスレじゃないんで

401 :デフォルトの名無しさん:2009/02/24(火) 17:08:00
ここに同姓同名の人達が居て、皆、息するかウンコする位しか
共通部分は無かったとする。(男も女も居た)
たまたまある瞬間、*非同期に*(相互連絡はもちろん面識すら無い状態で)
共通のちょっと珍しい行動を行った
(例えばあくびをする時に、腕を後ろに反らした)
その同姓同名の人達の共通仕様はあくびの時の動作であると定義されて
しまった。以降同姓同名の人は、みな、例えばあくびの時に腕を後ろに
反らさなければならないと規定されてしまった。
こういうのと似てるんだよね。

402 :デフォルトの名無しさん:2009/02/24(火) 17:49:33
ぜんぜん似てねーよ

403 :デフォルトの名無しさん:2009/02/24(火) 17:52:39
ANSIをカスラックか何かと勘違いしてるんじゃないのか
規格化の経緯を妄想するのは勝手だけどね

404 :デフォルトの名無しさん:2009/02/24(火) 18:35:15
1つ質問があります。

void型変数を含む構造体があったとします。
その構造体のメモリを動的に確保した上で
構造体内のvoid変数を違う型にキャストした場合
メモリはちゃんと確保されるのでしょうか。

405 :デフォルトの名無しさん:2009/02/24(火) 18:36:33
>>404
「void型変数」は存在できないはずです

406 :デフォルトの名無しさん:2009/02/24(火) 18:36:41
void型変数??????????

407 :デフォルトの名無しさん:2009/02/24(火) 18:41:26
キャストとメモリ確保の相違について

408 :デフォルトの名無しさん:2009/02/24(火) 18:43:05
エスパーしようと思ったが何を言いたいのかさっぱりわからない

409 :デフォルトの名無しさん:2009/02/24(火) 18:44:53
わからないのなら答えなくても結構

410 :デフォルトの名無しさん:2009/02/24(火) 18:47:06
malloc が返した void* をキャストしたら境界要求は守られるのかってことじゃないか?

411 :デフォルトの名無しさん:2009/02/24(火) 18:48:09
void変数があるって事はC言語じゃないな
つまりスレ違いだ

412 :デフォルトの名無しさん:2009/02/24(火) 18:48:34
>>410
自動で領域確保されると勘違いしている可能性が高い

413 :デフォルトの名無しさん:2009/02/24(火) 18:53:24
ある型のサイズをmallocに渡した結果得られるvoid*のことを
キャストと言い、またその行為をキャストすると表現するのなら
問題は全く無いな。

414 :デフォルトの名無しさん:2009/02/24(火) 18:58:16
>>413
日本語でおK

415 :デフォルトの名無しさん:2009/02/24(火) 19:04:00
キャスト:ある型のサイズをmallocに渡した結果得られるvoid*のこと
キャストする:ある型のサイズをmallocに渡してvoid*を得ること

void型変数を含む構造体があったとします。
その構造体のメモリを動的に確保した上で
構造体内のvoid変数を違う型にキャストした場合
メモリはちゃんと確保されるのでしょうか。

void型変数を含む構造体があったとします。
その構造体のメモリを動的に確保した上で
構造体内のvoid変数を違う型にある型のサイズをmallocに渡してvoid*を得た場合
メモリはちゃんと確保されるのでしょうか。

???

>>413
日本語でおK

416 :デフォルトの名無しさん:2009/02/24(火) 19:15:43
>>413
その言葉の意味するところが分からんな
ちょいと英語で言ってくれんか

417 :デフォルトの名無しさん:2009/02/24(火) 19:21:12
>>413
int i=234;
double d=(double)i;

こういうのをキャストと言って、決してコンバージョンとは言わないのだよ。

418 :デフォルトの名無しさん:2009/02/24(火) 19:21:45
>>415
なにを言ってるんだ?

419 :デフォルトの名無しさん:2009/02/24(火) 19:22:56
間違えました。すいません。
正しくはvoidではなくvoid*でした。

420 :デフォルトの名無しさん:2009/02/24(火) 19:32:22
>>413
Cのキャストは万能
例えば次の式もどのような処理系でも
正しく評価され{}は実行される筈

if( (int)3==(int)(long)(double)(long)(float)3){
hoge();
}

421 :デフォルトの名無しさん:2009/02/24(火) 19:33:26
>>419
どのみち、メモリが確保されるかどうかとは関係なくね?

422 :デフォルトの名無しさん:2009/02/24(火) 19:35:18
NULLはキャストされないな

423 :デフォルトの名無しさん:2009/02/24(火) 19:36:02
>>422
するだろ、しないとだめなケースもあるだろ

424 :デフォルトの名無しさん:2009/02/24(火) 19:37:23
>>423
C言語ではポインタとして使う限りキャストは必要ない

425 :デフォルトの名無しさん:2009/02/24(火) 19:41:20
>>424
つ可変引数

426 :デフォルトの名無しさん:2009/02/24(火) 19:44:48
(int*)NULL とか書いたことないな


427 :デフォルトの名無しさん:2009/02/24(火) 19:52:13
>>404
void*を含む構造体をその構造体としてキャストし、
更にその中のvoid*項目を任意の型にキャストしてから
使ってください。
構造体キャスト直後はvoid*項目は恐らくアクセス不能な
ポインタ値が入ってるので、キャストしてから使って
下さい。

428 :デフォルトの名無しさん:2009/02/24(火) 19:52:54
>>427
日本語でおk

429 :デフォルトの名無しさん:2009/02/24(火) 19:56:25
>>427
キャストの意味を完全に取り違えてる。

430 :デフォルトの名無しさん:2009/02/24(火) 19:57:45
>>429
キャストについて説明よろ

431 :デフォルトの名無しさん:2009/02/24(火) 20:00:36
>>404は void* を持ってC++継承機能相当の実現を狙ってるんだろう

出来るよ。

432 :デフォルトの名無しさん:2009/02/24(火) 20:12:23
>>429
キャストの定義まだぁ?

433 :デフォルトの名無しさん:2009/02/24(火) 20:23:20
>>432
ググレカス

434 :デフォルトの名無しさん:2009/02/24(火) 20:26:44
うーん
例えば

typedef struct _isono
{
  SDL_Surface *img;
  int id;
  int sazae;
  int masuo;
  int katuo;
  int wakame;
   int tara;
  int tama;
  double x,y;
  void *okazu;
  struct _isono *otonarisan;
} ISONO;
というものがあります。

これを
ie = malloc(sizeof(ISONO))
で確保して。

その後
int mezasi=500000;
(int *)ie->okazu=&mezasi;
とした場合mezasiは保持されるのかという話なんです。
分かりにくくてごめんなさい。

435 :デフォルトの名無しさん:2009/02/24(火) 20:27:11
回答者
わかる愚問
喜んで

回答者
わからぬ問題
ググレカス

436 :デフォルトの名無しさん:2009/02/24(火) 20:30:41
>>434
メザシのスコープが残ってる間は大丈夫。

437 :デフォルトの名無しさん:2009/02/24(火) 20:33:05
_wsplitpath_s にバグっぽいものがあるような気がします。俺だけ?

wchar_t FullPath[] = L"\\\\?\\d:"
wchar_t Drv[100];
_wsplitpath_s(FullPath,Drv,sizeof(Drv),NULL,0,NULL,0,NULL,0) // 失敗。 戻り値は0で、Drvには何も書き込まれていない。(きちんと分割できてない)

文字列の先頭に\があるせいかとも思ったが、下の例は成功する

wchar_t path[] = L"d:\\kuro01.wmv"
wchar_t FileName[1025],ext[257];
_wsplitpath_s(path,NULL,0,NULL,0,FileName,sizeof(FileName),ext,sizeof(ext)); // 成功。 戻り値0

XP SP3 + VC++ 2008 Express Edition

同じ戻り値0で文字列が\で始まってるのに、動作が違う!ふしぎ!

・・・なんで?
ちなみに、FullPathからFullPath+4に変えてやると成功する。


438 :デフォルトの名無しさん:2009/02/24(火) 20:35:45
>>436
おお
そうですか
素早い回答有難うございました。

439 :デフォルトの名無しさん:2009/02/24(火) 20:40:24
>とした場合mezasiは保持されるのかという話なんです。
そのアドレス値をポインタ値に変換されて他のポインタ変数に
入れたら値が消滅してしまうとすると、恐ろしくて誰もC等
使わないと思います。

440 :437:2009/02/24(火) 20:43:19
すみません。
"d:\\kuro01.wmv" ではなく、 "\\\\?\\d:\\kuro01.wmv"の間違いでした。

失敗するのは俺だけ?
誰か検証してみてください。

441 :デフォルトの名無しさん:2009/02/24(火) 20:51:33
使用者と(その可能性は若干薄いが)作成者が共に仕様に関して不安定な
部分を持っている状況では安易にバグとは言ってはいけない
てか完全にAPIスレの話題

442 :デフォルトの名無しさん:2009/02/24(火) 21:07:04
>>437
前者はドライブ名で後者はファイルと拡張子とまったく条件が違うが

443 :デフォルトの名無しさん:2009/02/24(火) 21:09:45
>>437
FullPathがドライブ名で始まってないのだから空文字が返されて正常終了で当たり前と思う


444 :デフォルトの名無しさん:2009/02/24(火) 21:10:50
"\\?\"がディレクトリとして分割される
そもそも_wsplitpath_sでそんな形式サポートしてないだろ
引数も間違ってるしちゃんとMSDN読めよ

445 :デフォルトの名無しさん:2009/02/24(火) 21:15:53
"\\\\?\\d:\\kuro01.wmv"でもドライブ名は空になると思うぞ
てか \\?\ ってなんだ

446 :デフォルトの名無しさん:2009/02/24(火) 21:20:20
これからはAPIの質問もここでおkですね

447 :デフォルトの名無しさん:2009/02/24(火) 21:30:22
環境依存スレいけ

448 :デフォルトの名無しさん:2009/02/24(火) 21:32:23
>>446
おk

449 :デフォルトの名無しさん:2009/02/24(火) 21:32:58
>>447
んなスレない

450 :デフォルトの名無しさん:2009/02/24(火) 21:34:25
>>449
お前の目は節穴か

451 :デフォルトの名無しさん:2009/02/24(火) 21:55:00
否、APIに関しちゃ(試行錯誤の)経験(だけ?)がものすごく重要だから
「俺に聞け」スレだな

452 :デフォルトの名無しさん:2009/02/24(火) 22:31:12
>>451
向こう行けグズ
http://pc11.2ch.net/test/read.cgi/tech/1233622578/

453 :デフォルトの名無しさん:2009/02/24(火) 23:17:08
>>434
(int *)のキャストはいらない
標準の処理系じゃコンパイル通らないし

454 :デフォルトの名無しさん:2009/02/24(火) 23:20:21
×標準の処理系
○規格に厳格な処理系

455 :デフォルトの名無しさん:2009/02/25(水) 01:13:52
いらないというより、キャストしただけでは左辺値にならないわけだが。

456 :デフォルトの名無しさん:2009/02/25(水) 01:24:22
キャストされたポインタは
左辺値になることは今のところは許されるが
将来はエラーになる可能性がある
と警告を出すのがgcc

だが逆の予想もあるかもなw
「キャストならぬ実際には元の型を非可逆的に変換してしまう
型変換演算子を介して他の型の値を読み込むことはエラーにな
る可能性がある。」

457 :デフォルトの名無しさん:2009/02/25(水) 01:28:32
refConフィールドとか

458 :デフォルトの名無しさん:2009/02/25(水) 03:08:25
mallocとは、なんとなくですがC++でいうnew見たいなものでしょうか?
もちろんコンストラクタとかはありませんが、その指定した分のメモリを
ヒープに割り当てて、ポインタで使えるようにするというのは、
あたらしくオブジェクトを作ることに似ていると思ったのですが...


459 :デフォルトの名無しさん:2009/02/25(水) 03:15:24
>>458 はい

460 :デフォルトの名無しさん:2009/02/25(水) 03:34:56
>>459
ありがとうございました。


461 :デフォルトの名無しさん:2009/02/25(水) 13:51:11
>>453-455
gccとかだと左辺値に読み替えてコンパイルするんだよな
>>456
ないないそれはない

462 :デフォルトの名無しさん:2009/02/25(水) 16:20:32
>>461
gcc4.3.3では、
error: lvalue required as left operand of assignment
になった。古いのは知らん。

463 :デフォルトの名無しさん:2009/02/25(水) 16:59:26
GCC3.4.5は -Wall を付けても warning だった

464 :デフォルトの名無しさん:2009/02/25(水) 18:34:56
_cprintfみたいに_とか_cとかがついてる関数って元の関数とどう違うんですか?


465 :デフォルトの名無しさん:2009/02/25(水) 18:52:13
出力先が違う・・・
マニュアル読め

466 :476:2009/02/25(水) 20:15:23
C言語でウイルス駆除ソフトみたいな感じで
ロックマンなど作れるでしょうか?
ロックマンの活動源はプログラムのコードで、ロックバスーターなどC言語で書いたりして強くすると
ウイルスを駆除しやすくなるなど、C言語で書いて新しいロックバスターなどをつけたり
ゴミデータでロックマンの体力をあげたり
そういうのって実際つくれるんですか?

467 :デフォルトの名無しさん:2009/02/25(水) 20:19:02
エグゼのほうかよ

468 :デフォルトの名無しさん:2009/02/25(水) 20:48:35
>>466
C言語では不可能です
あきらめましょう


469 :デフォルトの名無しさん:2009/02/25(水) 21:29:10
>>466
日本語でおk

470 :デフォルトの名無しさん:2009/02/25(水) 21:31:45
C言語でおk

471 :476:2009/02/25(水) 21:46:35
ひまなので書きました
#include <stdio.h>
void ango(char *p);
int main(void)
{
ango("aiueo");
return 0;
}
void ango(char *p)
{
while(*p){
printf("%c",*p+9);
p++;
}
printf("\n");
}
インクリメントのことなんですが
printf("%c",*p+9);
p++;
これを
*p++みたいにやりたいんですが (*p+9)++とやってもだめで
*(p+9)++これだと配列の要素9を繰り上げてしまうのです
どうすればいいんですか?教えてください

472 :476:2009/02/25(水) 21:48:15
自己解決しました
printf("%c",(*p++)+9);
でできました

473 :デフォルトの名無しさん:2009/02/25(水) 21:48:55
>>471
(*p++)+9

474 :デフォルトの名無しさん:2009/02/25(水) 21:49:39
*p+++9

475 :デフォルトの名無しさん:2009/02/25(水) 21:50:18
>>473
>>474


476 :デフォルトの名無しさん:2009/02/25(水) 22:44:57
>>475


477 :デフォルトの名無しさん:2009/02/25(水) 23:51:07
>>476

478 :デフォルトの名無しさん:2009/02/25(水) 23:56:53
if(n==0){〜}

if(!n){〜}
は完全に等価だと思っていいですか?


479 :デフォルトの名無しさん:2009/02/25(水) 23:58:26
>>478
nがマクロだと異なる場合がある。

480 :デフォルトの名無しさん:2009/02/26(木) 00:01:44
>>479
nはマクロでなく通常の変数を想定しています。
が、もしマクロで異なる場合があるとしたらそれはどんなマクロですか?

481 :デフォルトの名無しさん:2009/02/26(木) 00:05:55
#define n a=b

482 :デフォルトの名無しさん:2009/02/26(木) 00:08:00
あ、なるほど。
それは想像してませんでした。
ありがとうございます。

483 :デフォルトの名無しさん:2009/02/26(木) 00:10:04
まあそんなアホなマクロ書くやつはいないだろうけどな…

484 :デフォルトの名無しさん:2009/02/26(木) 00:13:03
レアかどうかは置いておいて、
言語スレで「完全に等価」か、と聞かれたら
否定せざるをえないでしょ

485 :デフォルトの名無しさん:2009/02/26(木) 00:15:22
すいません、初歩的な質問です。

static char *ptr = "abcdefg";

のstatic宣言で確保される静的領域はポインタ領域(4バイト)
だけなので、"abcdefg"はレアケースでぶっとびますよね??


486 :デフォルトの名無しさん:2009/02/26(木) 00:16:06
ぶっ飛びません。

487 :デフォルトの名無しさん:2009/02/26(木) 00:19:29
"レアケースでぶっとぶ"ってどういう意味

488 :デフォルトの名無しさん:2009/02/26(木) 00:22:52
ポインタ宣言時に初期化で確保された文字列はconst領域という読み取り専用の特殊な場所に保存される。

489 :デフォルトの名無しさん:2009/02/26(木) 00:24:11
ptrの領域としてsizeof(static char *)バイト
"abcdefg"の領域としてsizeof("abcdefg")バイト
確保される。

490 :デフォルトの名無しさん:2009/02/26(木) 00:27:26
>>485
ポインタと文字列がまだごっちゃになっているっぽくない?
この世(C言語)に文字列など存在しないのだよ。

491 :デフォルトの名無しさん:2009/02/26(木) 00:27:49
#define if(b) if(!(b))

492 :デフォルトの名無しさん:2009/02/26(木) 00:31:27
>>490
いや、普通に存在するし。

493 :デフォルトの名無しさん:2009/02/26(木) 00:34:40
>>490
"アホ"

494 :485:2009/02/26(木) 00:39:08
即レスの多さにビックリ!
組込屋なので>>485 の発想をしてしまいました。

レアケース例=プログラム実行中にメモリが枯渇して
          他プロセスがメモリ消費するケースとか。

>>488
>>489
ベストアンサーsです。どうもありがとう。

495 :デフォルトの名無しさん:2009/02/26(木) 00:41:32
わかるでしょう
ここに住人は>>485のようなレスを待ちわびているのです

496 :デフォルトの名無しさん:2009/02/26(木) 00:41:36
>レアケース例=プログラム実行中にメモリが枯渇して
          他プロセスがメモリ消費するケースとか。
ないない

497 :デフォルトの名無しさん:2009/02/26(木) 00:42:20
const領域とかねーわ
書き換え可能である保証がないだけだろ

498 :デフォルトの名無しさん:2009/02/26(木) 00:44:09
書き換えはできない。
環境によっては書き換えを無理やりやろうとするかもしれないが、深刻なエラーを引き起こす。jkだろ

499 :デフォルトの名無しさん:2009/02/26(木) 00:46:27
普通読み取り専用として考えるわな。
無理やり変更できる環境は見たことない。

500 :デフォルトの名無しさん:2009/02/26(木) 00:48:51
他のプロセスがメモリを侵略してくることを想定したら、防御策なんてあるのか?

501 :デフォルトの名無しさん:2009/02/26(木) 00:50:48
PC(いわゆるIBM互換機)には定数格納用のEPROMが搭載されていてconst宣言された定数はここに書き込まれる。
EPROMはROMなので通常定数が消される心配はない。
ただし、EPROMの要領は限られているのでPCのブート時(リセット)に紫外線を照射して内容を消去している。
長時間PCを利用していると不安定なるのはEPROMの容量が枯渇するためだ。
リセットが短すぎるとEPROMの内容が消去されない可能性があるのでリセットは十分長押しすること。(5秒以上が望ましいとされている)

502 :デフォルトの名無しさん:2009/02/26(木) 00:51:06
防御も何も、資源食い尽くせばみんな死亡だろうが。

503 :デフォルトの名無しさん:2009/02/26(木) 00:51:41
>>500
仮想メモリ

504 :デフォルトの名無しさん:2009/02/26(木) 00:53:27
>>501
それはない

505 :デフォルトの名無しさん:2009/02/26(木) 00:53:51
昔の組み込みだと、コードや定数データは ROM に格納されることがあったけど
今はどうだろうね。どっちにしろ環境依存だし、自分が作ってる環境がどうなのかは
組込屋なら当然知ってるはず


506 :デフォルトの名無しさん:2009/02/26(木) 00:53:57
>>500
DEP

507 :デフォルトの名無しさん:2009/02/26(木) 00:54:39
プラットフォーム、コンパイラやバージョンによっても異なると思うが、
VC 2008 の場合、文字列定数は CONST セグメントに置かれて、
書き換えようとするとセグメンテーションエラーになる

508 :デフォルトの名無しさん:2009/02/26(木) 00:56:02
定数を格納する領域のセグメント属性をユーザーレベル書き込み不可にしているだけだろ

組み込み系などではどこでも書き込めてしまうのがある

509 :デフォルトの名無しさん:2009/02/26(木) 00:56:22
規格上は必ずconstであるわけではないよ
たいていそうだけど

510 :デフォルトの名無しさん:2009/02/26(木) 00:56:53
>>501
リセットに時間かかりすぎだろw

511 :デフォルトの名無しさん:2009/02/26(木) 00:57:28
>>509
日本語でおk

512 :デフォルトの名無しさん:2009/02/26(木) 00:57:43
けっきょくOSによる。

513 :デフォルトの名無しさん:2009/02/26(木) 01:07:06
>>503
いや、リテラル用にとった領域を他のプロセスが上書きするって環境らしいよ。
OSが入っているのかどうかも・・・

514 :デフォルトの名無しさん:2009/02/26(木) 01:07:52
>>511
「文字列定数は書き換え不可の領域に配置される可能性がある」

515 :485:2009/02/26(木) 01:07:58
・・・レベル高い、勉強になる。

実は>>489を少し疑ったので自分なりに検証してみた。
>>489の理論が正しければサイズさえ合っていれば通ると・・・
結果は、GCCでWarning吐くが通った。↓

#include <stdio.h>
static char *ptr1 = "abcdefg";
static int *ptr2 = "abcdefg"; // warning
static int ptr3 = "abcdefg"; // warning
main()
{
printf("ptr1= %s\n", ptr1);
printf("ptr2= %s\n", ptr2);
printf("ptr3= %s\n", ptr3);
}


516 :デフォルトの名無しさん:2009/02/26(木) 01:11:21
>>514
書き換え不可の領域にどうやって格納するの?

517 :デフォルトの名無しさん:2009/02/26(木) 01:11:32
まだ何か勘違いしてるような

518 :デフォルトの名無しさん:2009/02/26(木) 01:13:02
>>516
マジですか?

519 :デフォルトの名無しさん:2009/02/26(木) 01:13:31
>>516
方法は処理系によって異なる

520 :デフォルトの名無しさん:2009/02/26(木) 01:15:25
>>499
昔のMSのコンパイラは書き換え可能領域に配置されていたよ

521 :デフォルトの名無しさん:2009/02/26(木) 01:15:26
>>519
どの処理系でもいいから一例をあげてよ
本当にできるなら

522 :デフォルトの名無しさん:2009/02/26(木) 01:17:17
>>516,521
正気とは思えない

523 :デフォルトの名無しさん:2009/02/26(木) 01:17:19
>>521
一例も何も、実際やってみれば書き換えしようとしたらエラーになるからそれじゃダメなの?

524 :デフォルトの名無しさん:2009/02/26(木) 01:17:52
配列の初期化とポインタの初期化は違うということだ。

525 :デフォルトの名無しさん:2009/02/26(木) 01:18:49
へたな釣りだ

526 :デフォルトの名無しさん:2009/02/26(木) 01:19:49
やっぱりポインタ関連は盛り上がるな!

527 :デフォルトの名無しさん:2009/02/26(木) 01:21:32
>>523
だから、その書き換えしようとしたらエラーになるようなところに、どうやって定数を格納するんだよ

528 :デフォルトの名無しさん:2009/02/26(木) 01:21:38
>>521
そんなことは知らない
規格が定めているのは書き換え可能である保証がないことだけであって
各処理系が実際にどう扱ってるかなどは関知するところではない

529 :デフォルトの名無しさん:2009/02/26(木) 01:23:09
>>527
「おれは腕が無いのでOSのソースコードを読んで該当するところを説明してくれよ」
って言ってるのとほぼ同じだぜ。
本当に知りたいならlinuxのソース持ってきて読めばいいのに。

530 :デフォルトの名無しさん:2009/02/26(木) 01:23:53
>>529
あるなら、あると言ってる側が示せよ。
無いものは示せない。

531 :デフォルトの名無しさん:2009/02/26(木) 01:24:34
>だから、その書き換えしようとしたらエラーになるようなところに、どうやって定数を格納するんだよ

大抵は、初期化の時にOSが手配してくれるんだよ。
どうやってって質問は意味がわからない。

532 :デフォルトの名無しさん:2009/02/26(木) 01:26:07
windowsもunixもそれぞれやり方があるだろうが、
一例を示すにしてもちゃんとやるならOSソースが必要。
それを説明してくれというならもうこの世界では誰も真面目に相手にしてくれない。

533 :デフォルトの名無しさん:2009/02/26(木) 01:26:11
>>531
OSは書き換えられるんだろ?それなら書き換え不可の領域じゃないだろ。
あくまでもアプリからの書き換えが制限されている可能性があるというだけで。

534 :デフォルトの名無しさん:2009/02/26(木) 01:26:59
ほら、できると言ってる奴は、OSのソースで、こうやってますって示せよ。

535 :デフォルトの名無しさん:2009/02/26(木) 01:27:28
>>527
定数を格納するのはアプリケーションでなくてローダー。
アプリケーションは書き込めないがローダーなどのシステムプログラムは書き込める。
そういうことだろう。

536 :デフォルトの名無しさん:2009/02/26(木) 01:27:29
こいつ受けるw

537 :デフォルトの名無しさん:2009/02/26(木) 01:27:51
釣られすぎだ

538 :デフォルトの名無しさん:2009/02/26(木) 01:28:25
そういや、ちょっと前に、strcpyを自作するって言って、
テストコードでリテラルを書き換えようとしているヤツがいたっけ。

539 :デフォルトの名無しさん:2009/02/26(木) 01:28:39
正直、メモリ保護も知らない奴は半年以上ROMっててほしい
くだらん議論でレスが進みすぎる

540 :デフォルトの名無しさん:2009/02/26(木) 01:30:06
>>533
おまえは何を言っているんだ?

541 :デフォルトの名無しさん:2009/02/26(木) 01:31:50
>>527がいっている書き込み不可能の意味は、たとえば机の表面とか、俺が今食ってるおにぎりの米粒にとかそういうことだろ。
ソフトウェア都下のレベルを超えてるwww

542 :デフォルトの名無しさん:2009/02/26(木) 01:33:15
>>541
まて、お前の米粒はそんなに固くなっているのか

543 :デフォルトの名無しさん:2009/02/26(木) 01:34:11
難かろうが、柔らかろうが、アプリケーションごときが俺のおにぎりに書き込むことは不可能だ。

544 :デフォルトの名無しさん:2009/02/26(木) 01:41:22
>>527
意味がわからん。一般的なOSでは、静的データは実行ファイルの中に含まれていて、プロセスが動作を開始する前にOSによってメモリ空間に展開される。
プロセス自身が自前で格納処理を行うわけじゃない。

545 :デフォルトの名無しさん:2009/02/26(木) 01:52:39
>>533
あー、「書き換え不可」って言った場合、普通の人なら「その領域にアクセスしようとするプロセスから見て」という前提で考えるのに、>>527は「どこから見ても書き換え不可」って解釈したのか。
……本気で馬鹿なんじゃないだろうか。

546 :デフォルトの名無しさん:2009/02/26(木) 01:58:23
明らかに馬鹿か電波か釣りなんだからスルーしろよ

547 :デフォルトの名無しさん:2009/02/26(木) 02:04:08
>あるなら、あると言ってる側が示せよ。
>無いものは示せない。

悪魔の証明かよw
実際にあるけどそれを証明するのはお前の仕事。
いちいちかまってあげるほどPGは甘くない。

548 :デフォルトの名無しさん:2009/02/26(木) 02:09:24
いいよもう
とにかくみんな書き込むのやめろ

549 :デフォルトの名無しさん:2009/02/26(木) 02:13:54
質問です。

マクロで関数を定義して使うのと、普通に関数定義して使うのだと、
それぞれメリットってなんでしょうか?

マクロ関数は使いすぎると見ずらくて困るのですが。

550 :デフォルトの名無しさん:2009/02/26(木) 02:15:28
×見ずらくて
○見づらくて

551 :デフォルトの名無しさん:2009/02/26(木) 02:16:00
ふつうは関数型マクロあるいは単にマクロと言う

552 :デフォルトの名無しさん:2009/02/26(木) 02:16:27
マクロ関数は呼び出しのコストがかからない


553 :549:2009/02/26(木) 02:19:05
>>552
ということは、性能的にボトルネックになりそうなところとかに使えば効果的ということですか。


554 :デフォルトの名無しさん:2009/02/26(木) 02:22:40
>>549
マクロの利点:
・おそらく関数より処理が早い場合が多いだろうという期待ができる
・関数ではできない処理、たとえば
  型に縛られない引数や型自体を引数に取ること
  プリプロセッサによる特殊な動作
 などができる

それ以外では関数のほうが大体有利

>>553
わからない
マクロは関数呼び出しのコストがないがそのぶんメモリイメージが増大して
結果的に遅くなることがないとはいえない
性能は実測で確かめること

555 :549:2009/02/26(木) 02:24:21
>>554
ありがとうございましたは

556 :デフォルトの名無しさん:2009/02/26(木) 02:27:33
>>553
ボトルネックになりそうだと言っても、マクロを使うのは避けた方が良い
そういうところはinline関数で行うべき

557 :デフォルトの名無しさん:2009/02/26(木) 05:59:14
C99にまだ準拠しないのが多い時代にinlineとか言われても

558 :デフォルトの名無しさん:2009/02/26(木) 06:19:06
拡張子cppにするんですよw

559 :デフォルトの名無しさん:2009/02/26(木) 07:51:42
struct Test{
char *name;
};

int main(){
//構造体の配列を宣言
struct Test test[10];

//forループを使って代入するテスト
int i;
for(i = 0;i < 10;i++){
//test[i].nameに"No." と i を結合させて代入したい。i が3なら、"No.3"

test[i].name = sprintf(test[i].name ,"No.%d" ,i);
//整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。

}

return 0;
}

//test[i].name = reinterpret_cast<char*>(i);
//C++のreinterpret_castを使うとコンパイルは通ったがprintfで表示させようとするとエラー

構造体の配列のnameをforループを使って連番で初期化できたら楽そうだな思って
とりあえず上記までは書きましたが、ここから先は如何すればいいでしょうか?

560 :デフォルトの名無しさん:2009/02/26(木) 08:03:27
#include <stdio.h>

struct Test {
    char name[128];
};

int main() {
    struct Test test[10];

    int i;
    for(i = 0; i < 10; i++) {
        sprintf(test[i].name, "No.%d", i);
    }
    return 0;
}


561 :デフォルトの名無しさん:2009/02/26(木) 08:11:39
>>560
即答、ありがとうございます
配列を使うんですね。再度、勉強し直して来ます

562 :デフォルトの名無しさん:2009/02/26(木) 10:41:18
Cのコードを処理系が実行した場合に何が起こるかを「予言」
する文脈では、NULLや静的な変数以外へのポインタ
などをアクセス不能(読み取り、書き込み不能)なものと
想定して議論をすることが多いが、これは経験値に基づく
もので、これ以外にアクセス不能なものが無いことやそれ
らのポインタ値が本当にアクセス不能なのかについては環
境依存な話となる。

563 :デフォルトの名無しさん:2009/02/26(木) 11:38:10
その話題はもう終わったよ

564 :デフォルトの名無しさん:2009/02/26(木) 13:42:13
>>562
正確には環境依存ではなく、状況依存だよ

565 :デフォルトの名無しさん:2009/02/26(木) 14:13:05
プリプロセッサの小技とか、たまに教わると感動するんだが。
使うかどうかは別にして。
前にみたロベールのC++教室では
#ifdef _DEBUG
#define ONLYDEBUG
#else
#define ONLYDEBUG /##/
#endif。
とか。
いいね、プリプロセッサ。

566 :デフォルトの名無しさん:2009/02/26(木) 14:40:59
>>565
そーゆーCのソースに見えないマクロはおじさん嫌いだな!
もちろんおじさんの個人的趣味だけどな!

567 :デフォルトの名無しさん:2009/02/26(木) 14:52:07
CコンパイラはOSとプロセスの契約関係に過ぎなく
プラットフォーム依存、環境、そして状況依存な
メモリアクセス可能性については基本的に関知しない。

添付ライブラリマニュアルでは、アクセス可能性につ
いて言及しているものがあるが、そのライブラリを
使用したことによってアクセス違反が発生したことに
ついて、一律すべてにおいてユーザーが契約違反な
メモリアドレスをライブラリに与えたと判定する
ことは原理的に出来ない。

568 :デフォルトの名無しさん:2009/02/26(木) 15:23:14
その話はもう終わったんだって何回言わせるの

569 :デフォルトの名無しさん:2009/02/26(木) 15:24:32
単に
#ifdef _DEBUG
#endif
のほうがずっとはっきりしていいと思うけどなぁ

570 :デフォルトの名無しさん:2009/02/26(木) 15:25:18
>>567
いいからもうあっちいけよ

571 :デフォルトの名無しさん:2009/02/26(木) 15:26:21
気になる人には気になる話みたいだな

572 :デフォルトの名無しさん:2009/02/26(木) 15:36:35
>>569
いやそれ全然違うだろ

573 :デフォルトの名無しさん:2009/02/26(木) 15:46:03
ONLYDEBUG より末尾が コメントアウトされる/されない : _DEBUG にて制御

(実利用頻度にもよるが)素直に #ifdef で挟む記述をしたほうが見やすいのでは?というところ

574 :デフォルトの名無しさん:2009/02/26(木) 15:49:02
条件マクロの乱用は末期状態に近いことを意味する(経験則)

575 :デフォルトの名無しさん:2009/02/26(木) 15:50:46
つまりそのソースは書き直したほうが良いということ

576 :デフォルトの名無しさん:2009/02/26(木) 15:53:44
>>574-575
いやあのぐらいなら乱用じゃ無いでしょ。
末期なソースはもっとひどい。


577 :デフォルトの名無しさん:2009/02/26(木) 15:57:37
条件指定識別子の与え方のパターンで1万通り以上の
バリエーションが発生するソースを誰が管理できるでしょうか?

578 :576:2009/02/26(木) 16:00:40
>>577
一万通りっておれそんなカオスなの見たことないww
それはさすがにクソだな

579 :デフォルトの名無しさん:2009/02/26(木) 16:07:03
>>577
管理とは?
そのままの形では修正が極度に難しくなることは事実だが
直接コンパイルしたものを利用するからで、ソースの
ひな形として保管しておけばいいのでは?
cppとか使って平文wに直し、それを修正するなり
整形するなり加筆するなりして利用すればいいだけ。

580 :デフォルトの名無しさん:2009/02/26(木) 16:21:26
2ちゃんだから、聞きかじりの誤った理論のみなのは仕方ない

581 :デフォルトの名無しさん:2009/02/26(木) 16:37:43
1万通りってたかが14bitだろ
その程度も扱えない奴は無能


582 :デフォルトの名無しさん:2009/02/26(木) 16:41:31
>>581
はいはい


583 :デフォルトの名無しさん:2009/02/26(木) 19:47:07
符号あり整数型と符号なし整数型に、別の言い回しってある?


584 :デフォルトの名無しさん:2009/02/26(木) 19:59:23
>>583
signed unsigned

585 :デフォルトの名無しさん:2009/02/26(木) 20:08:38
符号付き整数型/符号無し整数型
標準符号付き整数型/標準符号無し整数型

586 :デフォルトの名無しさん:2009/02/26(木) 20:30:13
>>583
汎整数型とかいう言い回しなかったっけ?

587 :デフォルトの名無しさん:2009/02/26(木) 20:47:24
>>586
bool型、char型、wchar_t型、符号付き整数型及び符号なし整数型をまとめて、汎整数型と呼ぶ。
汎整数型は、その同義語として整数型とも呼ぶ。

588 :583:2009/02/26(木) 20:48:11
みんなサンクス!

589 :デフォルトの名無しさん:2009/02/26(木) 21:02:26
>>581
50万行のソースコード1万通りだと。合計50億行です

590 :デフォルトの名無しさん:2009/02/26(木) 21:03:56
>>589
それが本当に50億行にしか見えないならもうプログラミングなんてやめろ

591 :デフォルトの名無しさん:2009/02/26(木) 21:04:02
C言語でオブジェクト指向を模したオープンソースで参考になるもの何かありますでしょうか?

592 :デフォルトの名無しさん:2009/02/26(木) 21:06:39
大きく出ましたね

593 :デフォルトの名無しさん:2009/02/26(木) 21:10:42
>>591
何故わざわざC言語でオブジェクト指向?

それはともかく、以前オブジェクト指向言語であるRubyの処理系は
Cで書かれているとか聞いた気がする
最近は知らないけど

594 :591:2009/02/26(木) 21:14:10
いや、別にそういう風に組みたいのではなくて、
実際そういう組み方で作られているものって何かあるかなと思って。

595 :デフォルトの名無しさん:2009/02/26(木) 21:14:57
perl6の処理系はhaskellで組んであるんだっけ?

596 :デフォルトの名無しさん:2009/02/26(木) 21:50:59
>>591
俺は使ったことがないが、GLib
ttp://www.gnome.gr.jp/docs/glib/
とか、Core Foundation
ttp://journal.mycom.co.jp/column/objc/034/index.html
とかさわってみれば?

597 :591:2009/02/26(木) 22:05:54
>>596
ありがとうございます。調べてみます。

598 :デフォルトの名無しさん:2009/02/26(木) 22:15:01
Cでガーべジコレクションって実装可能かな?
参照カウントをライブラリとして作っておくとか。

599 :デフォルトの名無しさん:2009/02/26(木) 22:16:32
存在を知りたいならBoehm GCでググれ。

600 :デフォルトの名無しさん:2009/02/26(木) 22:17:23
C で GC というと、Boehm GC が有名じゃない?

601 :デフォルトの名無しさん:2009/02/26(木) 22:22:54
timerのような関数ってありますか?


602 :デフォルトの名無しさん:2009/02/26(木) 22:41:18
標準ライブラリの話だったらあるわけ無いだろう。

603 :デフォルトの名無しさん:2009/02/26(木) 22:55:44
マクロの多用っていいこと?
マクロで処理すべき処理とマクロで処理すべきでない処理の一例を教えて。

604 :デフォルトの名無しさん:2009/02/26(木) 22:56:03
組込み系でも安心して使えるGCライブラリってある?

605 :476:2009/02/26(木) 22:58:23
文字を10進数に表示する物をつくったんですが
#include <stdio.h>
#include <string.h>
void henkan(char *p);
int main(void)
{
char u[80];
gets(u);
henkan(u);
return 0;
}
void henkan(char *p)
{
while(*p)
printf("%d-",*p++);
}

xx-xx-xx-xx-と最後に-が表示されてしまい
ifなどで取り除こうかとおもったんですが難しくて配列も-が増えるので増えてしまうので
どうすれば-を取り除くことができますか?
strlenなどで数をかぞえて取り除こうかと思ったんですが
教えてください

606 :デフォルトの名無しさん:2009/02/26(木) 22:59:20
getsを使うなとあれほど

607 :デフォルトの名無しさん:2009/02/26(木) 23:05:06
void henkan(char *p)
{
if (*p == '\0') return;
while (*(p+1)) {
printf("%d-",*p++);
}
printf("%d",*p);
}

608 :デフォルトの名無しさん:2009/02/26(木) 23:08:02
>>604
上ででてるBoehm GCも含めて、C言語での
"安心して使える"GCライブラリはないような気がする

609 :476:2009/02/26(木) 23:08:45
607さん天才ですね
そんな方法おもいつきませんでした
いらついてさいしょに-表示して-xx-xx-xx-xx-にしようとしました
本当ありがとうございます

610 :デフォルトの名無しさん:2009/02/26(木) 23:14:53
>>603
>マクロで処理すべき処理
出会ったことが無い。

>マクロで処理すべきでない処理
よくある例は
#define POW(x) ((x) * (x))

611 :デフォルトの名無しさん:2009/02/26(木) 23:16:47
>>608
そっか。
ちなみにメモリコンパクションのライブラリってあるのん?

612 :デフォルトの名無しさん:2009/02/26(木) 23:17:48
>>610
定数定義はCならマクロしか選択肢無いし、
だからといって即値を使うのは悪だし、
マクロで処理すべきだろう

613 :デフォルトの名無しさん:2009/02/26(木) 23:19:15
#ifdef _DEBUG
#define ONLY_DEBUG  if(1)
#else
#define ONLY_DEBUG  if(0)
#endif

という手もある。
else でリリースオンリーのコードも書ける。
ただし、片方では定義が消えてしまうものを含める事はできない欠点が。

614 :デフォルトの名無しさん:2009/02/26(木) 23:20:25
ビット演算するときはマクロ使ってるな
64bitの変数を上位32と下位32にわけたり
論理->物理アドレスもマクロだな。俺が作った訳じゃないけど…

615 :デフォルトの名無しさん:2009/02/26(木) 23:20:41
>>603
マクロでないと実現できないこともある
__FILE__ とか __LINE__ とか

616 :デフォルトの名無しさん:2009/02/26(木) 23:21:06
>>603
プラットフォームやターゲットなど、環境の違いを吸収するのにはマクロで
処理することが多い気がする(関数名の差し替えとか)
例外はあるけど、それ以外ではできるだけ避けた方がいいと思う

617 :デフォルトの名無しさん:2009/02/26(木) 23:21:50
>>612
enumで定数定義するというのもあるぜ。
少なくともマクロよりは健全。スコープの外側にまで影響しないしな
enum {HOGE = 100};

618 :デフォルトの名無しさん:2009/02/26(木) 23:35:14
俺がマクロを使うのは、ナマで書いちゃうと行がクソ長くなるけど
内容自体は単純でしかもよく使うAPIの呼び出しとかだな
具体的にはWindowsのMessageBox()をラップしたり

あとはもちろん型を引数に取ったり、同名のメンバを持つ違う構造体を引数に取ったり、
識別子を合成したり文字列に変換したりするような処理はマクロでなきゃできない

619 :デフォルトの名無しさん:2009/02/26(木) 23:36:28
>>618
なんか汚いソースになるか、可読性の高いソースになるか、危なっかしいな。
…俺もやるけどw

620 :デフォルトの名無しさん:2009/02/26(木) 23:52:42
数学の公式をマクロにしたりとか。
速度優先の最適化かければ関数でも速度は大差なんだろうけど。

621 :デフォルトの名無しさん:2009/02/26(木) 23:57:25
>>620
いや、差はなくなるよ。あったとしても、僅差だな。

622 :デフォルトの名無しさん:2009/02/27(金) 00:14:43
>>611
GC使うのはあきらめて、aprのメモリプールあたりでお茶を濁すとか。

623 :476:2009/02/27(金) 00:16:44
#include <stdio.h>
#include <string.h>
void henkan(char *p);
int main(void)
{
char u[80];
gets(u);
henkan(u);
return 0;
}
void henkan(char *p)
{
if (*p == '\0') return;
while (*(p+1)) {
printf("%d-",*p++);
}
printf("%d",*p);
}
これなんですが 何故最初に*p=='\0' returnとやるんですか?
aiueoと入力したら*pはaだとおもうんですが
*p=='\0'これで一致したらreturnをしてますがどういう意味ですか?

それとwhile (*(p+1)) {
printf("%d-",*p++);
}
printf("%d",*p);
*(p+1)はaiueoの場合iなのでiの場所が\0になるまでですよね?
なんだかよくわからなくなりました
2回もprintfがつかわれてるので
詳しい方詳しく教えてください

624 :デフォルトの名無しさん:2009/02/27(金) 00:22:46
君がgetsなんてつかっているからわざわざ安全にしてくれているんだろ
いい加減getsを使うのやめろ

625 :476:2009/02/27(金) 00:23:56
何で怒るんですか?
独習Cでgetsでてたので文字列を読み込むときはgetsってかいてあったので


626 :デフォルトの名無しさん:2009/02/27(金) 00:24:59
whileループをこう置き換えてみよう。
--
for (int ic = 0; p[ic] != '\0'; ++ic) {
if (ic > 0) putchar('-');
printf("%d", p[ic]);
}


627 :デフォルトの名無しさん:2009/02/27(金) 00:25:52
gets使ったプログラムをgccでコンパイルしてみろ

628 :デフォルトの名無しさん:2009/02/27(金) 00:27:07
>独習Cでgetsでてたので文字列を読み込むときはgetsってかいてあったので

そんな本は早く捨てるんだ!

629 :デフォルトの名無しさん:2009/02/27(金) 00:27:52
>>623
>何故最初に*p=='\0' returnとやるんですか?
getsで空エンターをたたいて、
""が入力文字列となったとき、
*(p+1)は不定となるため、その防御

'-' は(出力文字数 - 1)だけ表示する
なので、whileでは(出力文字数 - 1)回繰り返しを行い(文字+'-')を出力し、
最後に1文字だけ問答無用で文字だけを出力する

630 :デフォルトの名無しさん:2009/02/27(金) 00:29:37
getsはVC++でもwarningが出るような

631 :476:2009/02/27(金) 00:31:34
たしかにgetsを使ったときエラーみたいなのはでますが
問題なく動きます
629さんわかりやすかったです!
でもC言語が完ぺきになるまでgetsとかscanfは使って良いんですか?
他のでやるんですか?使ってはダメな癖とかつくんでしょうか?


632 :デフォルトの名無しさん:2009/02/27(金) 00:34:06
getsの禁止の理由?
現代日本語作文で古文でしか現れない文語の単語を
使うなというのと似てる。
意味が取り違えられる可能性が大だし、まず正しく
使えない。

633 :デフォルトの名無しさん:2009/02/27(金) 00:34:52
>>631
俺はいいと思うけどなぁ。
だって初心者だろ?
変に制限したら言語自体が嫌いになっちゃうよ。

…将来的には使わなくなると思いつつ使えば。


634 :デフォルトの名無しさん:2009/02/27(金) 00:35:45
>使ってはダメな癖とかつくんでしょうか?

わかってて使ってるならいいのかも知れなくもないが、
いまどきgetsを使えとはこれいかに。もはや後方互換のためにのみ存在する関数だろ。

char u[80];
gets(u);

uに100文字くらい入れてみればどうなるか。
その現象をこの関数で防げるか。

635 :デフォルトの名無しさん:2009/02/27(金) 00:36:45
スルーされる>626涙目(TT

636 :デフォルトの名無しさん:2009/02/27(金) 00:38:08
>>632
そういう奥ゆかしいものじゃなく
いわゆる米俗語、つまりフォーレターワード(スラング)
に近い表現と似ている。
下手に使い回すとプロセスを壊す。

637 :デフォルトの名無しさん:2009/02/27(金) 00:39:32
>>631
開発の現場でもよくあるけど、変な癖があって、
よくないのは分かってるけど、あとでまとめてきれいにしようって思っても
たいてい時間がなくなってそのまま出荷せざるをえないなんてことになりがち

基準がはっきりしてる場合は最初から守るクセをつけておいたほうがよい
この場合、コンパイル時に警告がでないこと、とか

638 :デフォルトの名無しさん:2009/02/27(金) 00:39:51
マニュアルには明確に「使うな」と書いてあるくらいだし

639 :デフォルトの名無しさん:2009/02/27(金) 00:40:05
>>636
getsで問題があるケースってどんなの?

640 :デフォルトの名無しさん:2009/02/27(金) 00:40:50
>>639
>634

641 :デフォルトの名無しさん:2009/02/27(金) 00:54:39
getsはfgetsに置き換えるべきだが
どうやれば簡単?

642 :デフォルトの名無しさん:2009/02/27(金) 00:57:06
#define gets(buf, fp) fgets(buf, sizeof(buf), fp)

643 :デフォルトの名無しさん:2009/02/27(金) 00:58:32
#define gets(buf) fgets(buf, sizeof(buf), stdin)


644 :デフォルトの名無しさん:2009/02/27(金) 00:59:59
sizeof(buf)

危険すぎるだろ

645 :デフォルトの名無しさん:2009/02/27(金) 01:01:15
例えば?

646 :デフォルトの名無しさん:2009/02/27(金) 01:01:25
いやまて、開業の取り扱いがgetsとfgetsで違うぞ。

647 :デフォルトの名無しさん:2009/02/27(金) 01:04:54
#define gets(buf) (fgets(buf, sizeof(buf), stdin) ? chomp(buf) : 0)


648 :デフォルトの名無しさん:2009/02/27(金) 01:11:23
char *chomp(char *buf) {
size_t len = strlen(buf);
if (len && buf[len-1] == '\n'){
len--;
buf[len] = 0;
if (len && buf[len-1] == '\r') {
len--;
buf[len] = 0;
}
}
return buf;
}

649 :デフォルトの名無しさん:2009/02/27(金) 01:12:50
( ゚д゚)・・・

650 :デフォルトの名無しさん:2009/02/27(金) 01:18:59
マクロでtypeofみたいなものが使えない限り安全にはならないな

651 :デフォルトの名無しさん:2009/02/27(金) 01:21:04
配列を渡したときだけしかうまく動かない gets なんていらない

652 :デフォルトの名無しさん:2009/02/27(金) 01:22:06
普通に書き直せ

653 :デフォルトの名無しさん:2009/02/27(金) 01:24:31
getsをそもそも使うな

654 :デフォルトの名無しさん:2009/02/27(金) 01:32:27
                  _,.. -‐―‐-- .. __
                /´   .      `ヽ 、
               / 、、: ヘ :::::::.....      \
              ./ ‐-_ヽ!:...__>;::;;;;;;;::::::::...._   \
             /   /  \!´   \::::::::! ̄ ヽ、 ヽ,
             `‐rt-'....,,,___」     \::!    .ソ_,ノ
               !:.\::::..  ヽ      >、:.、../_,、!、
     , --v‐- 、 _   ヽ::.ヽ::::..  `、    /  ニ,:',.':::::::(´
   , - ';;/::ノ.:::// l ̄`―`-:;;\::..  ヽ   /   /jヽ:::::::::::)-‐'チ、
 //.:::;ィ'":;∠;_/.:::!::::::.............  トr-;;_ `、 / ,.-=';`-- -‐ii'   ミ!ユ、
..:ヽ-'⌒/::;;-‐'´ └‐┴‐-----=;;:.ヽ;:::::..:;ノ::.::.ヽ;:::::::....... .. .oo!!_,,..-"-┘.....
     `┘             ´ ̄       ̄  ̄  ̄ ´

655 :デフォルトの名無しさん:2009/02/27(金) 01:43:22
Fished!!!

656 :デフォルトの名無しさん:2009/02/27(金) 02:04:46
>>651
でもどのみち素のgetsも安全じゃないし
オーバーフローしないだけマシかもよ

657 :デフォルトの名無しさん:2009/02/27(金) 02:05:40
オーバーランだった

658 :デフォルトの名無しさん:2009/02/27(金) 02:35:40
wikipediaで調べたらどっちでもいいみたいだよ

659 :デフォルトの名無しさん:2009/02/27(金) 06:50:38
いや、そのりくつはおかしい

660 :デフォルトの名無しさん:2009/02/27(金) 10:31:06
バッファオーバーフローって言わない?

661 :デフォルトの名無しさん:2009/02/27(金) 10:37:19
再帰でオーバーフローするのとはニュアンスが違うから、オーバーランと言いたいなぁ。

662 :デフォルトの名無しさん:2009/02/27(金) 11:07:50
再帰のがオーバーランぽいが

663 :デフォルトの名無しさん:2009/02/27(金) 13:38:54
容器からあふれるのと停止位置を越える

664 :476:2009/02/27(金) 13:46:45
文字を10進数にするやり方はわかったんですが
10進数を文字にする変換をつくろうとしたんですが
読み込んで
ABCの656667を読み込むと一つの数字などとよみこまれてしまい難しいです
65、66、67と認識するにはどうすればいいんですか?
2次元配列におさめるんでしょうか?難しすぎです
おしえてください

665 :デフォルトの名無しさん:2009/02/27(金) 14:17:58
>>664
ソースがないと何ともいえんが俺の勘によると
printf("%d",array[i]);の"%d"部分を"%d\n"にすればいいのでは

666 :デフォルトの名無しさん:2009/02/27(金) 14:24:20
forで2桁読み込んだら次の要素を処理する様にする

667 :デフォルトの名無しさん:2009/02/27(金) 14:32:09
sscanfでよくね


668 :デフォルトの名無しさん:2009/02/27(金) 14:34:58
それより入力の書式があいまいだという事が理解できてないと思うな。
10進数で3桁になる文字(小文字の'd'以降とか)はどうするのか、とか。
プログラムはまず入力するものと出力するものを決める事から始める。
きちんと入力されるものが規定されてないと出力は決まらないんだよ。
例えばスペースで区切った文字コードを入力にすれば、
atoiとか使って意図する出力が得られるはず。
65 66 67 => A B C



669 :デフォルトの名無しさん:2009/02/27(金) 14:46:08
Yahoo!みんなの政治がプロ市民団体に乗っ取られてる件
http://seiji.yahoo.co.jp/

 大江康弘? 誰? 高橋千秋?? 知らない。どちら様ですか? 
そんな民主党のマイナー議員の皆様が激しく高得点。
そもそもどこの選挙区で何の実績を挙げてるのかすらよく知らん。誰かちゃんと全部知ってる?
 そんな人が70人通りかかって69人も支持。嘘だろー。
それに何か10,259件も誰かのコメントに支持したり反対したりしている。
何この超絶ヒマそうな民主党支持者。わけわかんない。
一時間ほど経過したところ、評価数がさらに増えて10,289件になっている。
見て回った中では最高得点のクリッカーだ。
懸命にクリックしているのだとすると腱鞘炎まっしぐらだし、
スクリプトだとするとBOT使いは死ねという話である。おとなげない。

小沢への異様なまでの高評価。正直に書くと支持されず。
http://seiji.yahoo.co.jp/giin/rev/index.html?g=2007000340&s=0&p=1
ヤフーが捏造した政党支持率 自民3% 民主76% 共産6% 社民3% 新党日本4% 国民新党2% 公明1%
http://quizzes.yahoo.co.jp/quizresults.php?poll_id=7186&wv=1
アンケート操作疑惑
http://wiki.livedoor.jp/ahoo_question/d/FrontPage
Yahoo!みんなの政治,政治工作の舞台に その2
http://society6.2ch.net/test/read.cgi/giin/1222287632/

670 :デフォルトの名無しさん:2009/02/27(金) 14:53:12
Hello World! という文字列を表示させるプログラムって結構難しいですね。

#include <stdio.h>

int main(void)
{
printf("%c%c%c%c%c%c%c%c%c%c%c%c??/n"
,0x48,0x65,0x6c,0x6c,0x6f,0x20,0x57,0x6f,0x72,0x6c,0x64,0x21);
return 0;
}

参考までに、皆さんはどんな風に書いているのか教えてください。

671 :デフォルトの名無しさん:2009/02/27(金) 14:55:57
http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html

672 :デフォルトの名無しさん:2009/02/27(金) 15:15:09
>>670
釣り針見えてるぞ

673 :デフォルトの名無しさん:2009/02/27(金) 15:17:31
>>671
おぉー!
何かよく分からないけど、すごいですね!

他にも有りましたら、教えてください。

それにしても、printfかんすうを考えた人はすごいですね。
天才だと思いました。

2009ねん2がつ27にち

674 :デフォルトの名無しさん:2009/02/27(金) 15:37:00
>>671
は最近良く張られるが、コンピュータプログラミングは
あーみえてかなり長丁場な世界で、一年二年でどーにか
なる世界じゃないみたいだな

675 :デフォルトの名無しさん:2009/02/27(金) 15:42:48
671を見てなぜそう思うのかわからない。

676 :デフォルトの名無しさん:2009/02/27(金) 15:48:26
結果は同じことだが、微妙なやり方の相違に異議と意味を見いだして
いくこと。
結果最優先でやっていく世界とは多分違う

677 :デフォルトの名無しさん:2009/02/27(金) 15:52:57
671ってジョークだろw

678 :デフォルトの名無しさん:2009/02/27(金) 15:54:29
当たらずとも遠からずって感じ

679 :デフォルトの名無しさん:2009/02/27(金) 16:35:42
> それにしても、printfかんすうを考えた人はすごいですね。

Ken Tompson?

680 :デフォルトの名無しさん:2009/02/27(金) 16:42:09
>671
> % cc -o a.out ~/src/misc/hw/hw.c
> % a.out
ワロタw

681 :デフォルトの名無しさん:2009/02/27(金) 16:56:02
> Chief Executive
>
> % letter
> letter: Command not found.
> % mail
> To: ^X ^F ^C
> % help mail
> help: Command not found.
> % damn!
> !: Event unrecognized
> % logout

俺はこれがオキニだな
% が # だったりして・・・

682 :デフォルトの名無しさん:2009/02/27(金) 17:14:23
どこが面白いのかわかりません
皆、すごいことをやっているように思えるのですが…

683 :デフォルトの名無しさん:2009/02/27(金) 17:18:06
>>682
>681は純粋に英語の問題だよ。

684 :デフォルトの名無しさん:2009/02/27(金) 17:22:30
熟練した職業プログラマは無駄に長いコードを書くとか

685 :デフォルトの名無しさん:2009/02/27(金) 18:22:25
許容範囲を見極めチャレンジで玉砕を軽く繰り返せる
勘と知恵と無鉄砲さを持ち合わせた人にしか共感できんネタだ。

686 :デフォルトの名無しさん:2009/02/27(金) 18:25:00
>>680
これはひどい

687 :デフォルトの名無しさん:2009/02/27(金) 19:11:08
Hello World!

688 :デフォルトの名無しさん:2009/02/27(金) 19:35:37
>>677
世の中は、冗談でできてるって思う

689 :デフォルトの名無しさん:2009/02/27(金) 19:37:02
>>617
数値ならまあ場合によってそれでいいけど、
文字列は enum じゃ無理だよね

690 :デフォルトの名無しさん:2009/02/27(金) 19:37:03
>>683


691 :デフォルトの名無しさん:2009/02/27(金) 20:52:56
#include<stdio.h>
/*円の直径と円周の関係を表にする*/
main()
{
int d;
float c;
d=0;
while(d<=100);{
c=3.14*d;
printf("%d\t%f\n",d,c);
d=d+10;
}
return 0;
}

と書いて、「デバック無しで開始」をやったら
コマンドプロンプトに何も表示されません
ビルドしてもエラーは0なんですが・・

692 :デフォルトの名無しさん:2009/02/27(金) 20:55:06
;

693 :デフォルトの名無しさん:2009/02/27(金) 21:04:39
一回は表示されるんじゃねその状況でも

694 :デフォルトの名無しさん:2009/02/27(金) 21:12:53
while(d<=100);{

釣りとわかっている魚の気分だ

695 :デフォルトの名無しさん:2009/02/27(金) 21:15:38
>>693
いやいや無限ループしてるから

696 :デフォルトの名無しさん:2009/02/27(金) 21:16:55
ずっと待ってりゃなにかは表示されるんじゃないかなぁ。
ブルースクリーンとか。

697 :デフォルトの名無しさん:2009/02/27(金) 21:20:40
>>696
Windows9x 系ならありうるな

698 :デフォルトの名無しさん:2009/02/27(金) 21:23:53
ないない
while の直後にセミコロンの単なる無限ループだもの

699 :デフォルトの名無しさん:2009/02/27(金) 21:30:31
責任はとらんけどやってみりゃ分かるよ。
燃えやすいものはそばにおいとかんようにな。

700 :デフォルトの名無しさん:2009/02/27(金) 21:35:54
ああ、そうか条件あっても満たす事ないのか普通に勘違いしてた

701 :デフォルトの名無しさん:2009/02/27(金) 21:36:12
無限ループにも需要はあるよ。
計算機の利用率上げるとか。

702 :691:2009/02/27(金) 21:57:43
whileとforの後に;はダメなのか
よく分かった、みんなサンクス

703 :デフォルトの名無しさん:2009/02/27(金) 22:01:59
>>702
文とか式とか勉強しとくと良いよ。


704 :デフォルトの名無しさん:2009/02/27(金) 22:10:43
ちょwww;;

705 :デフォルトの名無しさん:2009/02/27(金) 22:26:06
入門しようとしてる人に「文と式勉強しろ」ってちょっとオーバーじゃない?
と一瞬思ったけどやっぱそうでもないのかな

もう一つキーワードに複文を加えときたいけど

706 :703:2009/02/27(金) 22:53:15
>>705
そうかな。
もしそうだったらスマソ。
でも簡単にで良いから式、文、式文、複文などを勉強しておくと入門者でも結構見通しが良くなると思うんだよね。


707 :デフォルトの名無しさん:2009/02/27(金) 23:00:38
ならうより
なれろ

鉄則

そんで金あったら
一冊本買え

708 :デフォルトの名無しさん:2009/02/27(金) 23:14:26
同じロジック書き直して分岐の数や関数が増減しなくなったら第一段階。

709 :デフォルトの名無しさん:2009/02/27(金) 23:19:11
あのさー、今から本気でCを勉強するのってダメなの?
なんか回り見るとみんなjavaとか一生懸命やってるし、
本屋に行ってもjavaばっかりなんだけど。
自分としては初めて勉強し始めたのがCだからCを極めたいというのがあって、
それとなんかコード書いててCだとなんかしっくりっくるっていうか、落ち着くって言うか、
まあ、Cしか満足に知らないからかもしれないんだけど。
ここはこういうことを聞くところではないのかな?
他で聞いた方がいい?

710 :デフォルトの名無しさん:2009/02/27(金) 23:22:57
趣味ならお好きに
仕事なら使える言語は多ければ多いほどいい

711 :デフォルトの名無しさん:2009/02/27(金) 23:25:03
一番求人が多いのがJavaだったっけ?
どんな言語でも極めるというのは大変だ。
とくにこの世界はいろんなこと知ってないと。

712 :デフォルトの名無しさん:2009/02/27(金) 23:25:06
一つの言語を極めるよりプログラムの仕方を覚えろ
そうしたら後は何をしても大抵大丈夫

713 :デフォルトの名無しさん:2009/02/27(金) 23:31:12
linuxでの開発がメインの俺はC、Java、perlあたりを仕事で使ってるけど、
そろそろM$の方にも手を出した方がいいのかと自問自答している。

714 :デフォルトの名無しさん:2009/02/27(金) 23:43:21
Cは教養です

715 :デフォルトの名無しさん:2009/02/27(金) 23:45:09
プログラムの仕方を教えてください

716 :デフォルトの名無しさん:2009/02/27(金) 23:45:48
>>713
まずM$とか意味不明な表記を改めた方がいい

717 :デフォルトの名無しさん:2009/02/27(金) 23:48:04
M$はマイクロソフトを軽蔑する言い方なのです。

718 :デフォルトの名無しさん:2009/02/27(金) 23:49:55
Cは強要です

719 :デフォルトの名無しさん:2009/02/27(金) 23:50:20
>>716みたいなまじめな人がまだいたんだな。

720 :デフォルトの名無しさん:2009/02/27(金) 23:51:48
Cを学んでないプログラマはえせプログラマ

721 :デフォルトの名無しさん:2009/02/27(金) 23:52:19
Cのフリーのおすすめの○○のコンパイラおすぃえて

722 :デフォルトの名無しさん:2009/02/27(金) 23:52:24
極めるんならCよりはC++だな

723 :デフォルトの名無しさん:2009/02/27(金) 23:57:34
極めるってなに?
入門書いくら買っても勉強にならない程度の知識を持つってこと?
詳細な文法もしくは言語の規格に詳しくなるってこと?
それともコンパイラや規格などにおいて業界の第一人者になるってこと?

724 :デフォルトの名無しさん:2009/02/28(土) 00:00:53
極めるって定義があいまいだが、周りの人が全員あいつはすごいって言ってくれたらそれなりに誇っていいんじゃね?

725 :709:2009/02/28(土) 00:04:35
あの、極めるって言っちゃったけど、そもそもそんなにレベル高くないし初心者だから
あんまり突っ込まないで欲しいです。
ただこの前javaの本をちょっとだけ読んでみたら何書いてあるのか訳ワカランくてすこし焦った。このままでイイのかなって。

726 :デフォルトの名無しさん:2009/02/28(土) 00:07:10
>>725
プログラミングが出来るようになってくれば
落ちついて順序良く見ていけば理解できる

727 :デフォルトの名無しさん:2009/02/28(土) 00:08:43
>>725
学生ならCは勉強して置けよ。C++も。
RubyとかPHPとかも一個くらい勉強しておけ。
就職したらCOBOLだのABAPだのやらされるかもしれないけど、足しにはなるから。

728 :709:2009/02/28(土) 00:10:48
皆さんありがとう。
ところで今のところDOSの黒い画面でしかプログラムできてないんですけど、
winAPIって言うのはやはり覚えた方がいいのでしょうかね?
難しそうなんですけど。
これはC++でやればいいんでしょうか?

729 :デフォルトの名無しさん:2009/02/28(土) 00:12:02
rubyは1.9になってわけわかんなくなった気がする。

730 :デフォルトの名無しさん:2009/02/28(土) 00:13:58
perlが5で終わったように
rubyは1.8で終わった

731 :デフォルトの名無しさん:2009/02/28(土) 00:14:54
>>728
Cでもできるだろ。
とりあえず、形だけ習ってみて、やりたいことに合わせて書き換えろよ。
http://www.geocities.jp/ky_webid/win32c/index.html

732 :デフォルトの名無しさん:2009/02/28(土) 00:16:53
>>728
疲れた時の気晴らし程度でいい
余計疲れるかもしれないけどw

733 :デフォルトの名無しさん:2009/02/28(土) 00:16:54
>>725
すまん別にいじめるつもりではなかった

C言語自体は別に極端に難しい言語でもなんでもないし
使わなくても詳しくなっといて欲しいぐらいには重要な言語

まあそんなに一気にたくさん勉強する自信ないんだろうから
まずなんのためにプログラム言語を勉強したいのか言ってくれないと
C言語とJavaどっちを薦めればいいのかわからないよ

趣味でゲームやWIndowsアプリ作りたいのか
SEなどで食っていけるようになりたいのか
明確な目的は無く単にPCやプログラムに詳しくなりたいのか
Googleみたいな所に入れるスキルが欲しいのか
etc..

734 :デフォルトの名無しさん:2009/02/28(土) 00:17:36
Win32APIはまた独特だからなぁ
Cの知識はもちろんだけど、API独特の流儀も学ばないといけないから大変だよ

735 :デフォルトの名無しさん:2009/02/28(土) 00:20:25
どっちに行くかにもよるな。
web前世紀の今、javaやっといたらしばらくは食えるだろう。
ネットワークな人ならCは必須だろうし、科学技術な人ならいまだにfortran現役だし。

ただ、スクリプト言語は便利なので1〜2つくらいはやっといていいと思う。

736 :デフォルトの名無しさん:2009/02/28(土) 00:21:56
デバイスドライバなどのHWよりのプログラム開発でもCは現役

737 :デフォルトの名無しさん:2009/02/28(土) 00:22:27
>>734
ちなみに独特じゃないAPIってどんなの?

738 :709:2009/02/28(土) 00:23:08
>>731-732
どうも。参考にして見ます。でもAPIが解らないとプログラムって作れないんですよね?
俺の勘違い?

>>733
あのですね、何となくのイメージなんですよ、これが。初心者のですね。
Cって言うと、何となく地味にこつこつやるタイプのイメージ。
javaはOLとかが楽しそうにやってるイメージ(実際は全然違うんでしょうけど
なので自分はCをやろうかなと思った程度なんです。初めは。

739 :デフォルトの名無しさん:2009/02/28(土) 00:30:10
>>738
そんな事はない
でも、windowsのソフトを作ろうと思うなら
知っていて損はない

740 :デフォルトの名無しさん:2009/02/28(土) 00:30:37
Cでごりごり作るのはUnix/Linuxの話じゃない?
WinはもはやWinAPI使うのがjkな感じに思えるんだが。

741 :デフォルトの名無しさん:2009/02/28(土) 00:34:41
ずーっとC++をやってなかったのでここらでやってみるのも乙だなと思ったんだが、
Cで作らずにC++で作るメリットってなんですか?

742 :デフォルトの名無しさん:2009/02/28(土) 00:34:45
>>740
女子高生!

743 :デフォルトの名無しさん:2009/02/28(土) 00:38:39
C言語といったらUNIXや組込みのイメージだなあ んで
Windowsで華やかなアプリ作りたいならC#
仕事の多いWeb系ならJavaやスクリプト言語

WIndowsプログラムは素人だけど
いまどきわざわざWin32APIをC言語で使ってもあんま嬉しいことないような気がする

744 :デフォルトの名無しさん:2009/02/28(土) 00:40:12
>いまどきわざわざWin32APIをC言語で使ってもあんま嬉しいことないような気がする

実際あることはあるよ。多くはないかもしれないが。
CでLinux用API作って、そのラッパーをWindowsで作ってWindowsAPIとして再利用。

745 :デフォルトの名無しさん:2009/02/28(土) 00:49:27
>>743
まあ、あんま嬉しいことはないなあ。

他人からもこんな面倒くせえことよくやったなあ

この程度の評価。

746 :デフォルトの名無しさん:2009/02/28(土) 00:50:11
>>724
そんな奴みたこと無い。設計者も含めてな

747 :デフォルトの名無しさん:2009/02/28(土) 00:55:49
何か自作プログラムのソースうpすれば極めたかどうかは俺が認定してやるよ


748 :デフォルトの名無しさん:2009/02/28(土) 00:56:37
javaなんてのは大抵茶髪のちゃらいやつがキーボード見ながらタイピングしてるイメージだからな

749 :デフォルトの名無しさん:2009/02/28(土) 01:06:33
javaは学習に向いてるのに、お金も稼げる貴重な言語だ。
ちょっとcpuやメモリを無駄遣いしてる気分になるのが
玉に瑕だな。

750 :デフォルトの名無しさん:2009/02/28(土) 01:11:05
フリーでおすすめのCコンパイラ教えてください。

751 :デフォルトの名無しさん:2009/02/28(土) 01:11:42
gcc

752 :デフォルトの名無しさん:2009/02/28(土) 01:12:51
GCC調べたらLLVMもいいそうなんですが

753 :デフォルトの名無しさん:2009/02/28(土) 01:15:15
ってか、フリーならほぼUnix/Linux環境だな?
でもってgcc以外を選ぶのはなぜだ?

754 :デフォルトの名無しさん:2009/02/28(土) 01:16:54
すいませんXPです

755 :デフォルトの名無しさん:2009/02/28(土) 01:17:40
visual C++ express

756 :デフォルトの名無しさん:2009/02/28(土) 01:19:02
>>741
Cと同等の小回りを利かせながら、
Cを上回る抽象化能力を発揮できること。

757 :デフォルトの名無しさん:2009/02/28(土) 01:19:43
winで初心者ならそのほうがいいな

758 :デフォルトの名無しさん:2009/02/28(土) 01:21:42
あと勝手につっこませていただいて
レベルはある程度関係なしに便利なエデイタは?

759 :デフォルトの名無しさん:2009/02/28(土) 01:23:27
vi

760 :デフォルトの名無しさん:2009/02/28(土) 01:25:32
>>741
デストラクタとテンプレートに尽きる

761 :デフォルトの名無しさん:2009/02/28(土) 01:29:05
タダだからLinux使うやつがいると本気で思ってそうなのが痛いな


762 :デフォルトの名無しさん:2009/02/28(土) 01:31:34
>>758
vim

763 :デフォルトの名無しさん:2009/02/28(土) 01:32:03
>>761
フリーをタダだと思ってるならかなり痛いな

764 :デフォルトの名無しさん:2009/02/28(土) 01:34:14
There is no such thing as a free lunch.

765 :デフォルトの名無しさん:2009/02/28(土) 01:34:43
GCCにします。とりあえずは

ttp://www.ooyashima.net/db/prong.htm
ここを参考にやってみます。

766 :デフォルトの名無しさん:2009/02/28(土) 01:35:59
Not Found
The requested URL /db/prong.htm was not found on this server.

Apache/1.3.39 Server at www.ooyashima.net Port 80

767 :デフォルトの名無しさん:2009/02/28(土) 01:38:05
progです。すいませんww
手打ちなもんで。

GCCはMinGWかCygwinのどちらが

768 :デフォルトの名無しさん:2009/02/28(土) 01:45:32
>>763
只って意味だろ

769 :デフォルトの名無しさん:2009/02/28(土) 01:52:31
linuxは代替がない場合に仕方なく使うものって感じだなあ
他に選択肢がある場合は基本的に使わないよ

770 :デフォルトの名無しさん:2009/02/28(土) 02:00:07
俺は逆だな。基本linuxでしか仕事しない。
もちろんオフィスとかメールとかはwindowsだけど、開発はlinuxが95%だね。
あとはAIXとかsolarisとかかなぁ。


771 :デフォルトの名無しさん:2009/02/28(土) 02:03:42
仕事の要請で仕方なく普段使わない環境使うのってストレスたまるよね。

772 :デフォルトの名無しさん:2009/02/28(土) 02:06:09
いい経験だと思ってむしろ高揚する

773 :デフォルトの名無しさん:2009/02/28(土) 02:09:01
化石環境はイライラするね

774 :デフォルトの名無しさん:2009/02/28(土) 02:11:57
gccはオプションがカオスすぎて入門には厳しいのです

775 :デフォルトの名無しさん:2009/02/28(土) 02:12:50
>>767
eclipse CDTとMinGWがいいと思う。初心者が必ず通る2分木の変数を、そのままデバッガで追えるから。
mingwはTDMってところで公開してる4.3.3が、iconvに対応しててshift jisが通るから、それを勧めとく。
gdb(デバッガ)は別途DLする必要があるかも。公式の3.4.5-3はshift jis(--input-charset=cp932)が
通らないので、よく例題にあるような日本語の文字列を、そのままソースに書き込めない。

>>769
あくまでここで議論する程度のコストでだけど、デバッグ周りならlinux/unixに優る物は無い。
残念な事に多くのメンテナも、まともに使って無いのが悲しいけどな。
VCEEが無料と言っても、linuxとはデバッグ機能に雲泥の差があるよ。

776 :デフォルトの名無しさん:2009/02/28(土) 02:17:30
というか、仕事でプログラムを作るときは
環境の理解にエネルギーの70%をさくのでは?

777 :デフォルトの名無しさん:2009/02/28(土) 02:18:11
>>776
それは真理だな。

778 :デフォルトの名無しさん:2009/02/28(土) 02:18:36
ありがとうございます。
まさか開発環境構築に挫折未満中腰になるとは思いませんでしたww

779 :デフォルトの名無しさん:2009/02/28(土) 02:23:41
変なのがいるが
窓で開発するってのにlinux/unixでgccとか無いから


780 :デフォルトの名無しさん:2009/02/28(土) 02:25:13
開発環境は何でもいいから得意なの持っとくといいと思うぞ。
Javaの開発でeclipse使ってデバッグしたときの感動は今も忘れないが、
今はgdbのお手軽さに・・・

781 :デフォルトの名無しさん:2009/02/28(土) 02:25:49
>>779
つcygwin

782 :デフォルトの名無しさん:2009/02/28(土) 02:27:08
>>775
最近Linuxのプログラム書こうとしてたのでUNIXのデバッグ話すげえ聞きたい
gdb以外にどんなものあるんだろうか?
gprofやgcovは基本かな
他にはvalgrindやgoogle-perftoolsぐらいしかわかんないわ

783 :デフォルトの名無しさん:2009/02/28(土) 02:28:47
>>782
バイナリハックを読めば参考になるものが発掘できるかもしれない

784 :デフォルトの名無しさん:2009/02/28(土) 02:32:46
>>783
目次見てきた
なるほど

785 :デフォルトの名無しさん:2009/02/28(土) 02:35:09
少し多いのでURLを張ります。
http://www.geocities.jp/aikuti89/100m.txt
↑を実行すると途中まではうまくいくのですが、タイムを入力する時点で
エラーが出てプログラムが終了してしまします。
どうしたらいいでしょうか?

786 :デフォルトの名無しさん:2009/02/28(土) 02:44:22
とりあえず%lf
ところで ={0,} ってできたっけ?

787 :デフォルトの名無しさん:2009/02/28(土) 02:46:56
getsでオーバーフローでもしてるんじゃねーの

788 :デフォルトの名無しさん:2009/02/28(土) 02:47:20
40人も入力させるのは嫌がらせなのか…
しかもハードコーディングされているしw

とりあえずscanfのパラメータがおかしいな

789 :デフォルトの名無しさん:2009/02/28(土) 02:49:24
%[^\n]
これか
入力抑制してないじゃん

790 :デフォルトの名無しさん:2009/02/28(土) 02:49:39
とりあえず-Wallオプション付けてgccでコンパイルしたら警告がたくさん出たのでそれをなくすことを考えよう。

791 :デフォルトの名無しさん:2009/02/28(土) 02:51:54
stを初期化する場所がおかしいとか
gets使うなとか
printfに直で文字列ぶちこむなとか


792 :デフォルトの名無しさん:2009/02/28(土) 02:54:59
こういうの見るとscanfは素人が使う関数じゃないってのがよくわかる

793 :デフォルトの名無しさん:2009/02/28(土) 03:01:27
>>782
windows環境じゃelectric fence位しか動かないんだけど、
linuxのgccはコンパイル時に静的、動的領域のバッファオーバー(アンダー)ランを検出する
optionやライブラリが幾つかある。しかしlinux使ってると、簡単なリークやオーバーランが
すぐ見つかるんだよな。開発環境としては恵まれてても、機能を使わなきゃ、
何の意味も無いって事だ。もっとも、複雑なlibrary構成が原因で、追いきれないんだろうけど。

794 :デフォルトの名無しさん:2009/02/28(土) 03:02:05
fgetsを使えと言われたのですがどうしたらいいのかよくわかりません
数字を入力するときや、文字列を入力したいときにはどうすればいいのでしょうか?

795 :デフォルトの名無しさん:2009/02/28(土) 03:04:31
fgetsしてsscanfする

796 :デフォルトの名無しさん:2009/02/28(土) 03:06:01
実際、本当の最初に最初だけscanfで、あとは全部fgetsで読ませて、
相当Cに慣れた頃に改めてscanfファミリーを教えるのが正しいと思うんだけどな

797 :デフォルトの名無しさん:2009/02/28(土) 03:07:10
ぐくろうぜ。wikipediaにさえ書いてあるぞ

798 :デフォルトの名無しさん:2009/02/28(土) 03:07:33
scanf,fprintfなどの書式付き入出力は書式定義文字列の
間のプラットフォームやバージョン互換性が低いからト
ラブルの元になりがちなので凝ったのは使わないほうが
いいと聞いたのですが、実際どんなものなのでしょうか?

799 :785:2009/02/28(土) 03:12:16
アドバイスありがとうございます。
scanfは使わないほうがいいみたいなので、
他の関数を使おうと思うのですが何を使ったらいいでしょうか?

800 :デフォルトの名無しさん:2009/02/28(土) 03:13:42
マンコマンド使え

801 :デフォルトの名無しさん:2009/02/28(土) 03:17:32
>>793
なるほどなあ
gccすげえ
man gcc してみたけどオプションたくさんあってどれのこと言ってるかさっぱりだ
Binary Hacksとか読みつつgccについてももう少し詳しくなってみようかなあ

802 :デフォルトの名無しさん:2009/02/28(土) 03:17:43
>>799
>>795見ろ

803 :デフォルトの名無しさん:2009/02/28(土) 03:18:08
【審議中】
    |∧∧|       (( ) )   (( ) )  ((⌒ )
 __(;゚Д゚)___   (( ) )   (( ⌒ )  (( ) )
 | ⊂l>>800 l⊃|    ノ火.,、   ノ人., 、  ノ人.,、
  ̄ ̄|.|.  .|| ̄ ̄   γノ)::)  γノ)::)   γノ)::) 
    |.|=.=.||       ゝ人ノ  ゝ火ノ   ゝ人ノ
    |∪∪|        ||∧,,∧ ||∧,,∧  ||  ボォオ
    |    |      ∧ (´・ω・) (・ω・`) ∧∧
    |    |      ( ´・ω) U) ( つと ノ(ω・` )
   ~~~~~~~~     | U (  ´・) (・`  ). .と ノ
              u-u (    ) (   ノ u-u
                  `u-u'. `u-u'

804 :デフォルトの名無しさん:2009/02/28(土) 03:21:19
>>798
もし君が正しい日本語を話しているつもりならもう1回教科書を読み直すこと
そうでないなら中学校からやりなおすこと

805 :デフォルトの名無しさん:2009/02/28(土) 03:24:04
日本語構文解析能力が低い方がいらっしゃいますねw

806 :デフォルトの名無しさん:2009/02/28(土) 03:27:55
凝った(書式)って事だろ。ぶっちゃけ798の自己完結通り。
書き慣れてる人は、無難で冗長な(その代わり読みやすい)、
コードを書く。つうかもう酔ったので寝る

807 :785:2009/02/28(土) 03:28:03
>>802
>>795
ありがとうございます。
sscanfとfgetsをぐぐってやってみます。

808 :デフォルトの名無しさん:2009/02/28(土) 03:39:17
>>793
electric fenceってそんなもの使わなくても
VCなら、_CrtSetDbgFlag でメモリリークや簡単なオーバーラン
なら検出できるでしょ
単体テストレベルならたいていこれで十分だし、
VCの標準ライブラリとして存在するところは、むしろWindowsの
アドバンテージだと思う

さすがにコンパイル時にリークやオーバランの検出することまではできないけど


809 :デフォルトの名無しさん:2009/02/28(土) 03:46:03
ランダムな大きさのメモリブロックの確保、解放を交互に繰り返してると
メモリ容量は当然十分あるのにヒープがフラグメンテーションを起こして
mallocコマンドがNULLを返してくることがあるからfree関数は頻繁に
呼び出すことは避け、ある程度まとめてあるタイミングで一気に呼び出した
ほうが良い

と聞きましたが正しいでしょうか?
(フラグメンテーションの兆候としてmallocがやたらと時間がかかる
ようになるとか聞きました)

810 :デフォルトの名無しさん:2009/02/28(土) 05:32:43
freeを一気に呼び出すのはなるほど効果がありそうな気がしなくもないが、
フラグメントが問題になる・するようなら、
mallocの回数を減らすほうがよっぽど世間でよく行われる対策だと思う。

811 :デフォルトの名無しさん:2009/02/28(土) 05:33:21
>>809
たしかにその通り
ttp://ja.wikipedia.org/wiki/Malloc#.E3.83.92.E3.83.BC.E3.83.97.E6.96.B9.E5.BC.8F
ここにも書いてある
普通のmallocはヒープだからね

でもまあfreeをまとめたタイミングでやるというより,一度にまとめてmallocすることを考えたほうがいいと思う
これを管理するために自前でメモリプールの機構を作ってるアプリとかライブラリとかたくさんあるよ
C言語だったらAPRとか,C++だったらboost::poolとか

812 :デフォルトの名無しさん:2009/02/28(土) 10:59:00
> ある程度まとめてあるタイミングで一気に呼び出した
> ほうが良い

これが結局 exit ぐせになる

813 :デフォルトの名無しさん:2009/02/28(土) 11:22:14
exit でいいじゃん。

814 :デフォルトの名無しさん:2009/02/28(土) 13:50:34
>>809
まとめて、というより、要らなくなったらすぐに free すればいい
わざわざfreeを遅延させても意味はない

フラグメント対策なら、malloc/free をいじるより、確保するサイズを
揃える(例えば2のn乗)方がいい


815 :デフォルトの名無しさん:2009/02/28(土) 13:58:32
確保するサイズを2のn乗にすると管理領域込みで2のn乗+αの領域が必要になるよね。

816 :デフォルトの名無しさん:2009/02/28(土) 14:03:29
>>814
>>814
>>814
>>814

817 :デフォルトの名無しさん:2009/02/28(土) 14:07:22
>>815
そういう細かいことはどうでもよくて、確保するサイズを揃える方が
効果あるってこと

818 :デフォルトの名無しさん:2009/02/28(土) 14:08:59
alloca

819 :デフォルトの名無しさん:2009/02/28(土) 14:11:19
>>817
揃えると何故フラグメント対策になるんだ?
全く理解不能。

サイズを揃えることとフラグメントは全く関係ない。

820 :デフォルトの名無しさん:2009/02/28(土) 14:12:03
malloc/freeの機能や性能が問題になる規模のアプリなら>>811でFAだ。
そんなことは入門の間はあんまし気にしなくていい。
中級くらいでも気にしなくていいケースの方が多い。

821 :デフォルトの名無しさん:2009/02/28(土) 14:25:02
C言語の初心者、入門者、中級者、上級者、専門家とか
言われてますが、具体的にどう区別したらいいでしょうかね?

822 :デフォルトの名無しさん:2009/02/28(土) 14:32:00
名のったもの勝ち

823 :デフォルトの名無しさん:2009/02/28(土) 14:33:35
>>811
普通の malloc は未規定の実装だ
特定の malloc に依存した最適化をやるなら環境を判別すべき

824 :デフォルトの名無しさん:2009/02/28(土) 14:40:53
>>819
サイズが揃えるというよりもallocする最小単位を例えば64K単位に切り上げると規約してコーディングするとmalloc管理ポインタの数が減ってmallocの処理速度は早くなる傾向はあるだろうね。
フラグメンテーションが問題になるのはmarkやreleaseなどの
あるポインタより上位アドレスにあるヒープブロックの一層
プロシージャが用意されてるPASCAL系言語の話でCは実は余り
関係が無い(と思うよ)。
ただ最近のmallocは処理速度をかなり重視しているので、
空き領域検索の最適検索を適当にしてfirst-matchストラテジーに
近づいてる傾向があるので。フラグメンテーションが発生すると
NULLを返す確率が増えると聞く。
その意味でもなるべく小さなブロックを作らないように心がける
というのは良いことだろうと思う

825 :デフォルトの名無しさん:2009/02/28(土) 14:44:15
ライブラリの実装自体も進化しつづけているから半端な最適化の
独自実装やるくらいなら何も考えずそのまま使った方が安定してたりすんじゃないか

なので全体でなく、具体的なボトルネックを見つけ出して、ピンポイントに地道な
改善(リスト=>配列とか)を積み重ねていくことを考えたほうがいいと思う

826 :デフォルトの名無しさん:2009/02/28(土) 14:44:21
COBOL経験5年の者ですが、
C言語&java&phpを覚えるには1月では不可能でしょうか。

827 :デフォルトの名無しさん:2009/02/28(土) 14:46:08
人による
求められているレベルにも依存する

が、個人的には無理なんじゃないかという気はする

828 :デフォルトの名無しさん:2009/02/28(土) 14:49:24
>>826
可能。
1言語1週間で残りの1週間でschemeを覚えるべき。

829 :デフォルトの名無しさん:2009/02/28(土) 14:52:18
>>825
そのとおり

830 :デフォルトの名無しさん:2009/02/28(土) 15:04:07
1週間で1言語なんて、文法のさわりを覚えても使い物にならないレベルにしかならない。
本当は1年で1言語くらいがちょうどいいん。

831 :デフォルトの名無しさん:2009/02/28(土) 15:05:00
>>830
よほどバカなんだな

832 :デフォルトの名無しさん:2009/02/28(土) 15:05:52
>>828みたいのがいるからアホプログラムが乱立してえらいことになるんだな

833 :デフォルトの名無しさん:2009/02/28(土) 15:06:42
せいぜいやさしいCでも読んでわかった気でいろよw

834 :デフォルトの名無しさん:2009/02/28(土) 15:08:31
やさしいシリーズなら1週間で数冊読めるんじゃね?
ただそれだけのレベルにしかならないが。

835 :デフォルトの名無しさん:2009/02/28(土) 15:12:31
やさしいCはいい本だよ。これで十分。

836 :デフォルトの名無しさん:2009/02/28(土) 15:15:37
やさしいCを終えたやつがここで質問に答えてるのかwww

837 :デフォルトの名無しさん:2009/02/28(土) 15:17:47
「お姉さんとやさしくC」
は難しいだろうな

838 :デフォルトの名無しさん:2009/02/28(土) 15:18:38
CなんてそもそもやさしいC以上でも以下でもないよ。

839 :デフォルトの名無しさん:2009/02/28(土) 15:21:02
俺C言語初めて1週間だけど専門家だよ

840 :デフォルトの名無しさん:2009/02/28(土) 15:21:09
>>838
お前はもう帰っていい。

841 :デフォルトの名無しさん:2009/02/28(土) 15:22:34
俺はaからzまでの言語をマスターしている

842 :デフォルトの名無しさん:2009/02/28(土) 15:23:09
やさしいZ言語期待

843 :デフォルトの名無しさん:2009/02/28(土) 15:26:49
>>830
んなアホな。普通の手続き型言語なら、文法とライブラリの編成を憶えりゃ(1〜2週間くらい)、あとはマニュアル引き引きである程度何とかなる。
(特殊な概念があるものについてはものによるが)
まぁ、1言語を1年かけて深くやるのは悪くないやり方だ。
「達人プログラマー」(黒い方)にも1年に1つ言語を学ぶべしって書いてある。

844 :デフォルトの名無しさん:2009/02/28(土) 15:28:36
言語覚えるだけなら1週間程度でもいけるだろ
ライブラリは別だが

845 :デフォルトの名無しさん:2009/02/28(土) 15:29:29
>んなアホな。普通の手続き型言語なら、文法とライブラリの編成を憶えりゃ(1〜2週間くらい)、あとはマニュアル引き引きである程度何とかなる。

でもうちには来てほしくない。

846 :デフォルトの名無しさん:2009/02/28(土) 15:30:03
おまえら使い物になるかどうかで判断しれw

847 :デフォルトの名無しさん:2009/02/28(土) 15:32:54
言語覚えるのとちゃんとしたプログラムが組めるのは雲泥の差がある

848 :デフォルトの名無しさん:2009/02/28(土) 15:37:57
小説読んで小説家になったつもりにでもなってろ

849 :デフォルトの名無しさん:2009/02/28(土) 15:42:20
1週間で習得できるものを、1週間も続けられずに習得できてない奴が、ゴチャゴチャ言っても意味が無い。

先ずは1週間続けてみろ。話はそれからだ。

850 :デフォルトの名無しさん:2009/02/28(土) 15:54:57
>>849 おまえあれだろ 1週間かけてさわりの部分はわかったといって、インターネット上検索しまくり該当処理をコピー&ペーストして
     仕上げていくきだろ 


851 :デフォルトの名無しさん:2009/02/28(土) 15:56:11
自分のペースでやれよ。
なに、1週間にこだわってんの?

852 :デフォルトの名無しさん:2009/02/28(土) 15:57:54
一週間で覚えたつもりになって職場で絶望するでFA

853 :デフォルトの名無しさん:2009/02/28(土) 15:59:16
別に絶望はしないだろ
1週間だからと自分に言い訳する程度だ

854 :デフォルトの名無しさん:2009/02/28(土) 15:59:59
覚えるんじゃなくて理解するんだけどな。

855 :デフォルトの名無しさん:2009/02/28(土) 16:03:07
文法を覚えても小説は書けないよってだけ

856 :デフォルトの名無しさん:2009/02/28(土) 16:03:11
言い訳するくらいなら最初から覚えたとか考えるな。
1年かけて謙虚に勉強しろ。

857 :デフォルトの名無しさん:2009/02/28(土) 16:05:44
3年かけてようやくポインターを理解したセンスのない奴らの僻みって凄いなww
Cなんてちょっとセンスがあれば1週間で覚えられる言語だよ
そんな大変な言語じゃない

逆に言えば、そのシンプルさがCの良さだ

858 :デフォルトの名無しさん:2009/02/28(土) 16:07:48
俺なんて3日で極めたぜ

859 :デフォルトの名無しさん:2009/02/28(土) 16:09:23
Cは言語だけ覚えてもダメってことに気付けw

860 :デフォルトの名無しさん:2009/02/28(土) 16:10:41
それはアプリを作るのであればCに限らず全ての言語に言えること。

861 :デフォルトの名無しさん:2009/02/28(土) 16:11:00
現実としてまともに使いこなせるようになるまで1週間というのはあまりにも世界を知らなすぎる。

862 :デフォルトの名無しさん:2009/02/28(土) 16:11:10
>>857
本当に覚えてればいいが
覚えた気になってるだけの人はたちが悪いw

863 :デフォルトの名無しさん:2009/02/28(土) 16:11:23
世界には馬鹿が多いからな。

864 :デフォルトの名無しさん:2009/02/28(土) 16:11:56
まあ口ではあることないこと好きに言えるからな。
匿名掲示板で何言ったってアホ?の一言で終了できる。

865 :デフォルトの名無しさん:2009/02/28(土) 16:12:17
3日とか1週間とか3年とか言ってるお前らの方がよっぽど馬鹿だけどなww

866 :デフォルトの名無しさん:2009/02/28(土) 16:12:40
>>864
おまえもな

867 :デフォルトの名無しさん:2009/02/28(土) 16:15:43
井の中の蛙レベル

868 :デフォルトの名無しさん:2009/02/28(土) 16:16:30
どんぐりの背比べ

869 :デフォルトの名無しさん:2009/02/28(土) 16:17:53
大海にはCを1週間で覚えてバリバリ仕事してる連中がたくさんいる
カエルには解らないだろうけどな

870 :デフォルトの名無しさん:2009/02/28(土) 16:18:04
一週間で覚えたって思ってるやつはまさにそうだな

871 :デフォルトの名無しさん:2009/02/28(土) 16:19:06
1週間で覚えたやつがバリバリ仕事して大変な無数のバグを顧客に指摘されるというケースがあるのをご存じだろうか?

872 :デフォルトの名無しさん:2009/02/28(土) 16:19:38
>>869

一週間バリバリ勉強して、3年ちんたら勉強した後に、バリバリ仕事してんだろww

873 :デフォルトの名無しさん:2009/02/28(土) 16:21:07
お前らのレベルの低い職場自慢はそこまでだ

874 :デフォルトの名無しさん:2009/02/28(土) 16:26:13
むしろレベルの高い職場をいってみれ

875 :デフォルトの名無しさん:2009/02/28(土) 16:33:54
他の言語やってれば1週間でも覚えられるだろ

876 :デフォルトの名無しさん:2009/02/28(土) 16:34:44
だから覚えるのと使えるのは(ry

877 :デフォルトの名無しさん:2009/02/28(土) 16:40:16
覚えたけど使えないとか抜かす無能がまだいるのか

878 :デフォルトの名無しさん:2009/02/28(土) 16:40:42
中学生でもCは二週間ぐらいで覚えられる。
それが使えるかどうかだなまさに

879 :デフォルトの名無しさん:2009/02/28(土) 16:42:43
覚えたら使えると思ってる奴って本当にいるのか疑わしくなってきた
もはや意地になって書き込んでるとしか思えん

880 :デフォルトの名無しさん:2009/02/28(土) 16:44:04
センスがあれば1週間でCを使える。
センスが無ければ3年あってもCを使えない。

それだけ。

881 :デフォルトの名無しさん:2009/02/28(土) 16:44:14
たぶん一人だろ

882 :デフォルトの名無しさん:2009/02/28(土) 16:45:04
>>880
こいつアホ臭すぎる。もう意味ねぇ。

883 :デフォルトの名無しさん:2009/02/28(土) 16:46:10
1週間でCを使えるようにならない奴は自分のセンスの無さを呪え。

884 :デフォルトの名無しさん:2009/02/28(土) 16:47:06
>>880は問題外だが、ある程度の経験があれば応用が利くようにはなる。
でもそれなりの使い手になるには相応の時間が必要だ。

885 :デフォルトの名無しさん:2009/02/28(土) 16:50:42
使い手である必要はないんじゃね?
>>880が目指してるのはあくまでやさしいCレベルだし。

886 :デフォルトの名無しさん:2009/02/28(土) 16:57:58
技術が無いニンゲンはやさしいCがどうのこうのと言わなければ自分の自尊心を保てないんだろうな。

887 :デフォルトの名無しさん:2009/02/28(土) 16:58:35
一週間である程度使えるようになってそこから精進していくならわかるが
一週間で完璧に出来る奴がいたら見てみたいw

888 :デフォルトの名無しさん:2009/02/28(土) 16:59:18
Cなんて「やさしいC」をマスターしていれば十分だ。

889 :デフォルトの名無しさん:2009/02/28(土) 17:00:20
>>887
随分レベルの低いコミュニティーに属しているんだな

890 :デフォルトの名無しさん:2009/02/28(土) 17:01:09
C言語はHTMLとリンクしますか?
例えばweb上で保険の加入システムのようなシステムを作るには、
何が必要でしょうか。
HTMLとCとoracleがあれば無償で作成可でしょうか。
oracleではなくSQLでしょうか。
トンチンカンですみません。

891 :デフォルトの名無しさん:2009/02/28(土) 17:01:57
レベルの高いコミュニティーにいる人間だって1週間でマスターするなんて不可能だ。


892 :デフォルトの名無しさん:2009/02/28(土) 17:02:20
日本語マスターしてると言ってもろくに文章も書けない
売り物になるには程遠い

893 :デフォルトの名無しさん:2009/02/28(土) 17:03:03
>>891
>>889に取ってのレベルの低い高いは一般の意味と違うんだよ

894 :デフォルトの名無しさん:2009/02/28(土) 17:05:16
>>891
まさに、井の中の蛙的発言だな。君は大海を知った方がいいよ。

895 :デフォルトの名無しさん:2009/02/28(土) 17:05:50
>>891
レベルの高いコミュニティーに属してから言えよww

896 :デフォルトの名無しさん:2009/02/28(土) 17:06:58
>>890
WebProg板へどうぞ。

897 :デフォルトの名無しさん:2009/02/28(土) 17:08:01
>>890
CGI

898 :デフォルトの名無しさん:2009/02/28(土) 17:10:05
お前らにとっての大海は俺の家の便所の水くらいのもんだろ
せいぜい匿名掲示板で天才ぶれよw

899 :デフォルトの名無しさん:2009/02/28(土) 17:10:55
じゃあ俺は一秒でC使えるようになるわ

900 :デフォルトの名無しさん:2009/02/28(土) 17:12:58
じゃあ俺は0.1秒で。なんせ大海に住むレベルの高いコミュニティーの一員なので。

901 :デフォルトの名無しさん:2009/02/28(土) 17:13:41
まあ、自分が3年かけて使えるようになったものを、
実はセンスがあれば1週間で使えるようになるなんて信じたくないよな。

自分がセンスが無いと認めてしまうことになるからな。
自尊心がそれを許さないんだろう。

902 :デフォルトの名無しさん:2009/02/28(土) 17:14:46
センス云々の話ではもうない気がする。
1週間っていうのを押し通したいか屈するかの問題だろ。
消防の話だと思ってスルーしてくれ。

903 :デフォルトの名無しさん:2009/02/28(土) 17:14:48
NG「センス」「自尊心」

904 :デフォルトの名無しさん:2009/02/28(土) 17:17:13
>>902
それは真理だな。

905 :デフォルトの名無しさん:2009/02/28(土) 17:20:58
消防レスが続いたのでまとめておくと、

大海:腐った水たまり
蛙:大会に住むボウフラ
覚えた:やさしいCを読破した
センス:うんこ波の自尊心

それでは続きをお楽しみ下さい。

906 :デフォルトの名無しさん:2009/02/28(土) 17:25:46
やっと24のシーズン2見終わったぜw

で、何このスレの速さ?

907 :デフォルトの名無しさん:2009/02/28(土) 17:30:54
>>906
オメ!
24はだらだら長く続くからちょっと飽きるけど、でも見ちゃうな。

908 :デフォルトの名無しさん:2009/02/28(土) 18:04:45
ありがとうございます。
CGIはPHPで実現が可能なのですよね。
本屋で色んな本を立ち読みしましたが、
業務webアプリケーションを構築するにはHTMLとPHPまたはJAVAとSQLがあればよいみたいに書いてました。
PHPとJAVAはwebアプリケーションを作るにあたってはちがいがないと考えてよいでしょうか。

909 :デフォルトの名無しさん:2009/02/28(土) 18:10:02
そもそもだ、
大海を知るあなたたちがどういう海でCを一週間で使えるようにしなければいけないのか。
他の言語は関係なさそうだよね、流れとしては。

910 :デフォルトの名無しさん:2009/02/28(土) 18:30:21
で皆Cは好き?

911 :デフォルトの名無しさん:2009/02/28(土) 18:35:53
Cで何でもできるけど、もうちょっと刺激的な言語の方が面白いね。

912 :デフォルトの名無しさん:2009/02/28(土) 18:40:14
刺激的な言語?

913 :デフォルトの名無しさん:2009/02/28(土) 18:47:13
Cって誰でも出来る?

914 :デフォルトの名無しさん:2009/02/28(土) 18:50:19
できるよ。

915 :デフォルトの名無しさん:2009/02/28(土) 18:55:48
できねーよ。

916 :デフォルトの名無しさん:2009/02/28(土) 18:58:00
>>915
涙拭けよww

917 :デフォルトの名無しさん:2009/02/28(土) 18:59:43
Z80

918 :デフォルトの名無しさん:2009/02/28(土) 19:00:53
8080

919 :デフォルトの名無しさん:2009/02/28(土) 19:03:06
 ':,     ',   _____,,.. -‐ ''"´ ̄ ̄`"'' ー 、.,          /
  ':,    ',   >' ´             `ヽ.       /  し バ
   ':,     /                    ヽ.     ,'   な カ
    ':,   ,:' /   /   ,'´        ヽ.     ':,/Ti  i.   い に
. \    ,' /   /  ,'  !      ;   ',  ヽ__ /::::| | |   で 
   \  / ,'   ,'!  /!  !   ;  /!   i  「:::|'´::::::::| | .!.   く
     ∠__,!   / !メ、」_,,./|   /! / !   ハ! |__」<:::::」」 |.   れ
`"''  、..,,_  !  / ,ァ7´, `iヽ| / |ヽ、」ニイ、 |  ! |^ヽ、」」  |.   る
       i,/レイ i┘ i. レ'   'ア´!_」 ハヽ|   |   | ∠   ! ?
─--     /   !  ゝ- '       !    ! !   |   |  `ヽ.
      /   7/l/l/   、     `'ー‐ '_ノ!   |  i  |    ` ' ー---
,. -──-'、  ,人    `i`ァー-- 、  /l/l/l |    !. |  |
       ヽ.ソ  `: 、.   レ'    ',   u ,/|    |  !  |
 そ  で  i  /ーナ= 、 '、    ノ  ,.イ,カ    !  |  |
 の  き  .|ヘ./|/レへ`>-r  =ニi´、.,_ |  i  ハ  ! ,'
 く   る   !     _,.イ´ヽ.7   /  /:::| /レ'  レ'レ'
 ら  わ   |   /7:::::!  ○O'´  /::::::レ'ヽ.
 い  .よ  .|  /  /:::::::レ'/ムヽ.  /::::::::/   ヽ.
 ! !      ! ./  ,':::::::::::!/ ハ:::::`´:::::::::::;'    ',

920 :デフォルトの名無しさん:2009/02/28(土) 19:04:13
何年もこのスレや宿題スレに粘着してるのに、ちっとも成長しないお馬鹿さんには、
一週間でCができるようになる人の存在は認められませんw

921 :デフォルトの名無しさん:2009/02/28(土) 19:17:02
スルー検定実施中

922 :デフォルトの名無しさん:2009/02/28(土) 19:18:57
このスレに粘着してて成長期待できるわけねぇだろwアホか

923 :デフォルトの名無しさん:2009/02/28(土) 19:24:25
右算術シフトしたいときは除算したほうが安全なのでしょうか?

924 :デフォルトの名無しさん:2009/02/28(土) 19:25:39
意味わからん

925 :デフォルトの名無しさん:2009/02/28(土) 20:22:34
>>920 まさか1モジュール作って単体テストで終わりではないよな それでは全く素人と同じだもんな 

926 :デフォルトの名無しさん:2009/02/28(土) 20:28:01
他言語で普通にできる人なら、一週間程度でそれなりにこなせるようになるだろ。

927 :デフォルトの名無しさん:2009/02/28(土) 20:41:14
お前はいつまで引きずってんだw

928 :デフォルトの名無しさん:2009/02/28(土) 20:56:49
できねーよ。うちのばあちゃんにCやらせたってできねーもん。

929 :デフォルトの名無しさん:2009/02/28(土) 21:01:32
>>926 マニュアルまたはサンプル(雛形)を参照しながらなら暇な大学生だったらできるだろう しかし実際は複数モジュールで1つの目的を果たすのだから
     当然、結合テストまでのデバックやその環境(ダミーモジュールやツールを作ったりいろいろ)、上位行程までの試験環境の構築、業務を把握しな
     ければならない本番データや異常処理まで含めなければプロとしては精通しているとはいえないだろ
     それに、言語が違えば使えるツールや使用できるDBやらもろもろ変わってくる場合がある マニュアルやドキュメントだってないかもしれない
     そんな状況で1週間で把握したものがどれ程のものになる いくら他の言語をしっていても加速するまではそれ相応の時間がかかる 


930 :デフォルトの名無しさん:2009/02/28(土) 21:04:50
>>928
ばあちゃんを侮るな

931 :デフォルトの名無しさん:2009/02/28(土) 21:06:16
>>923
何が「安全」なのか知らないが、シフトより2のn乗で割るのが簡単だろうね。

932 :デフォルトの名無しさん:2009/02/28(土) 21:06:53
>>928
コンピュータおばあちゃんkwsk

933 :デフォルトの名無しさん:2009/02/28(土) 21:41:18
すみません・・・
CGIはPHPで実現が可能なのですよね。
本屋で色んな本を立ち読みしましたが、
業務webアプリケーションを構築するにはHTMLとPHPまたはJAVAとSQLがあればよいみたいに書いてました。
PHPとJAVAはwebアプリケーションを作るにあたってはちがいがないと考えてよいでしょうか・・・
(T_T)。

934 :デフォルトの名無しさん:2009/02/28(土) 21:43:17
やれることは同じだよ。

935 :デフォルトの名無しさん:2009/02/28(土) 21:43:23
>>929
変な改行する奴が何言っても説得力がないw

936 :デフォルトの名無しさん:2009/02/28(土) 21:46:00
>>935
言葉を返せなくなったのかw

937 :デフォルトの名無しさん:2009/02/28(土) 21:49:29
>>929
それって職場になじむまでの話だろ。

言語の習得と全く関係のない話だ。

938 :デフォルトの名無しさん:2009/02/28(土) 21:50:26
>マニュアルやドキュメントだってないかもしれない
勝手に意味わかんない条件つけんなw

939 :デフォルトの名無しさん:2009/02/28(土) 21:51:07
>>937
それでは通用しないだろ

940 :デフォルトの名無しさん:2009/02/28(土) 21:52:38
>>929はDBやモジュールの意味がわかってるんだろうか

941 :デフォルトの名無しさん:2009/02/28(土) 21:53:30
わかってないから>>929みたいな書き込みするんだろ?

942 :デフォルトの名無しさん:2009/02/28(土) 21:54:25
>>940
お前は環境が変わるということをわかっているのか



943 :デフォルトの名無しさん:2009/02/28(土) 21:55:12
何で環境の話になってるの?バカなの?

944 :デフォルトの名無しさん:2009/02/28(土) 21:56:36
>>943
おまえは他の言語を習得して使えもんになるのかといったな


945 :デフォルトの名無しさん:2009/02/28(土) 21:58:18
>>>943
おまえは言語変わっても環境はそのままだと思うのか

946 :デフォルトの名無しさん:2009/02/28(土) 21:58:28
俺の会社で俺ライブラリーを使った開発を頼んだら、
どんなエキスパートだって俺ライブラリーに慣れるには時間がかかるだろ。
言語の習得と、特定の環境への適応は全く別の話だ。

特定の環境への適応を言い出したら、世の中にプログラミング言語を取得している奴なんていなくなる。
>>929はまったくバカな議論だ。

947 :デフォルトの名無しさん:2009/02/28(土) 21:59:41
>使えもん

948 :デフォルトの名無しさん:2009/02/28(土) 22:00:00
>>943
使える人間になるまでの話をしている 


949 :デフォルトの名無しさん:2009/02/28(土) 22:00:57
>>948
一人でしてろ。馬鹿。

950 :デフォルトの名無しさん:2009/02/28(土) 22:01:06
>>946
あたりまえだ

951 :デフォルトの名無しさん:2009/02/28(土) 22:02:39
それならアルバイトの大学生で十分ではないのか


952 :デフォルトの名無しさん:2009/02/28(土) 22:05:02
使えない人間にいくら私は言語を習得したから雇えといわれて雇えるか

953 :デフォルトの名無しさん:2009/02/28(土) 22:06:04
それならスキル表の提出なんかいらないだろ

954 :デフォルトの名無しさん:2009/02/28(土) 22:07:32
スルー検定はおばあちゃんで対抗した俺以外不合格だな

955 :デフォルトの名無しさん:2009/02/28(土) 22:08:59
>>952
>>929の理論では、雇い先ごとに開発環境が違って、初期状態では誰もスキルなんて持ってないから
誰を雇っても同じだ。

956 :デフォルトの名無しさん:2009/02/28(土) 22:09:11
わーこんなにスレが荒れてどうしたのみんな
PGとしては一流でもスルースキルは三流ですか

957 :デフォルトの名無しさん:2009/02/28(土) 22:10:03
このスレはいつもこんなもんだからw

958 :デフォルトの名無しさん:2009/02/28(土) 22:11:29
明治生まれのコンピュータ

959 :デフォルトの名無しさん:2009/02/28(土) 22:11:50
お前らうるせえ。
全員アンカつけてやれ。

960 :デフォルトの名無しさん:2009/02/28(土) 22:13:33
>>955
あほか、だから言語という共通のスキルだけでもあわせようとする

961 :デフォルトの名無しさん:2009/02/28(土) 22:15:41
>>946
おまえは言語がかわるとはどういうことかわかっているのかOSも変わる可能性だってある

962 :デフォルトの名無しさん:2009/02/28(土) 22:17:56
OSかわった程度で困るPGとかいんのかよw

963 :デフォルトの名無しさん:2009/02/28(土) 22:19:04
>>962
こまらないならスキルに使用言語を削除するか

964 :デフォルトの名無しさん:2009/02/28(土) 22:21:41
日本語でおk

965 :デフォルトの名無しさん:2009/02/28(土) 22:25:22
言語が同じなら開発環境も似てくる スキルを積めば異なる環境への対応度も柔軟になる


966 :デフォルトの名無しさん:2009/02/28(土) 22:25:24
OSが変わったらめっちゃこまるんだが…
XP->Vistaでもプログラムかなり変えたしなぁ

967 :デフォルトの名無しさん:2009/02/28(土) 22:26:59
それ意味違うだろw

968 :デフォルトの名無しさん:2009/02/28(土) 22:30:02
>>931
右シフトは論理なのか算術なのかは未定義だったような

969 :デフォルトの名無しさん:2009/02/28(土) 22:31:19
ああ、UINT DWORD とかはムカつくな。

970 :デフォルトの名無しさん:2009/02/28(土) 22:38:52
>>960
だから、その「言語という共通のスキル」は1週間で身につけられる。

971 :デフォルトの名無しさん:2009/02/28(土) 22:45:05
>>970
1週間で身につけたものはスキルとは言わない


972 :デフォルトの名無しさん:2009/02/28(土) 22:47:11
>>971
ならば「言語という共通のスキル」は>>971定義の「スキル」ではないというだけのこと。
だから何?

973 :デフォルトの名無しさん:2009/02/28(土) 22:48:38
面接官:「C言語は扱えますか?」
自分:「はい、大丈夫です」
面接官:「ご経験はどのくらいで?」
自分:「1週間です」
面接官:「( ゚д゚)・・・」

974 :デフォルトの名無しさん:2009/02/28(土) 22:49:55
>>973
ワロタ

975 :デフォルトの名無しさん:2009/02/28(土) 22:51:42
>>972 おまえは1週間でどれだけのことができる どれだけの成果物を残せた結果のスキルなんだ

976 :デフォルトの名無しさん:2009/02/28(土) 22:52:23
>>973
当然そのあと技術面接するんだろ?マスターしていれば1週間で10年でも変わりない。

977 :デフォルトの名無しさん:2009/02/28(土) 22:53:54
客観的に言語の腕を言い表すのは難しい・・・
製作者に俺の名前が入ってるフリーのソースが20ほどネットでゲットできますよ、とかいえば
そのソース次第ではいい印象かも。

978 :デフォルトの名無しさん:2009/02/28(土) 22:55:14
>>975
1週間なら簡易HTTPサーバーくらいじゃないか?

979 :デフォルトの名無しさん:2009/02/28(土) 22:55:22
>>972
成果物がないスキルは不要だ

980 :デフォルトの名無しさん:2009/02/28(土) 22:58:24
>>977
言語のスキルなんて適当に問題出してその場で答えさせればすぐ分かるよ。

981 :デフォルトの名無しさん:2009/02/28(土) 22:59:52
>>980
実際そこまでするか?って感じ。
履歴書に開発経験を数行書いておけばいい希ガス

982 :デフォルトの名無しさん:2009/02/28(土) 23:00:36
実際に試さないとはったりだけで全く使えないのが入ってきちゃうからw

983 :デフォルトの名無しさん:2009/02/28(土) 23:01:49
>>981
その程度の会社なら、その程度の採用判断でいいんじゃないの?

うちの会社じゃあり得ないけど。

984 :デフォルトの名無しさん:2009/02/28(土) 23:01:49
そのための試用期間ですよ

985 :デフォルトの名無しさん:2009/02/28(土) 23:02:59
実際に問題を解かせるなんて、中途採用じゃないな?
ここでは中途の話をしてるのかと思ったが・・・
逆に新卒で面接のみってのはほとんどないだろう。

986 :デフォルトの名無しさん:2009/02/28(土) 23:03:20
履歴書に開発経験なんて当てにならんよな。
この前クビにした使えない派遣が次の就活でどんな素敵な開発経験を書いていることやら。

987 :デフォルトの名無しさん:2009/02/28(土) 23:04:06
外資系ならそいつの履歴を確認して即採用って多いぞ。
その代り使えないと判断されたときの切り方も神速だが。

988 :デフォルトの名無しさん:2009/02/28(土) 23:04:52
まあ、外資と日本企業では採用も首切りもやり方が違うからな。

989 :デフォルトの名無しさん:2009/02/28(土) 23:05:06
このスレに書き込んでるやつは試験が絶対に必要だな。

990 :デフォルトの名無しさん:2009/02/28(土) 23:09:06
マ板に消えろクズども

991 :デフォルトの名無しさん:2009/02/28(土) 23:10:00
>>989
俺のこと?


992 :デフォルトの名無しさん:2009/02/28(土) 23:10:54
いや、俺だろ。

993 :デフォルトの名無しさん:2009/02/28(土) 23:11:18
ざけんな俺が

994 :デフォルトの名無しさん:2009/02/28(土) 23:11:50
いやいや俺が

995 :デフォルトの名無しさん:2009/02/28(土) 23:11:59
それでは私が

996 :デフォルトの名無しさん:2009/02/28(土) 23:15:20
埋め

997 :デフォルトの名無しさん:2009/02/28(土) 23:15:37
どうぞどうぞ

998 :デフォルトの名無しさん:2009/02/28(土) 23:15:41
埋め

999 :デフォルトの名無しさん:2009/02/28(土) 23:16:01
埋め

1000 :デフォルトの名無しさん:2009/02/28(土) 23:16:13
1000キター


1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

206 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)