C言語なら俺に聞け(入門篇) Part 45
レス数が1000を超えています。これ以上書き込みはできません。
教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
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
0002デフォルトの名無しさん
2009/02/19(木) 23:26:50printf("testcolorchar=%s\n", color_name[1]);
これで"green"が取得できるけど、
"green"の"n"を取得するには何て書けばいいんですかの。
0003デフォルトの名無しさん
2009/02/19(木) 23:30:44・printf("%c\n", strchr(color_name[1], 'n'));
・printf("%c\n", 1[color_name][4]);
0004デフォルトの名無しさん
2009/02/19(木) 23:31:27printf("%c\n", * strchr(color_name[1], 'n'));
0005デフォルトの名無しさん
2009/02/19(木) 23:38:270006デフォルトの名無しさん
2009/02/19(木) 23:40:46それは無理。
0007デフォルトの名無しさん
2009/02/19(木) 23:58:42printf("%c\n", color_name[1][4]);
エラーになって2時間悩んだけど%sにしてたからだったのか。
0008476
2009/02/20(金) 00:07:55覚えるのややこしいし
int u[10][5];でu[1][2];の値を出すにはどうしますか?
私はu[1][2]とやります
わざわざ*(u[1]+2)とかやるのでめんどくさいので
統一とかあるんですか?
0009デフォルトの名無しさん
2009/02/20(金) 00:08:200010デフォルトの名無しさん
2009/02/20(金) 00:13:120011デフォルトの名無しさん
2009/02/20(金) 00:27:000012デフォルトの名無しさん
2009/02/20(金) 00:45:070013デフォルトの名無しさん
2009/02/20(金) 00:54:2600145
2009/02/20(金) 01:05:48>>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"の取得と解釈した。
0015デフォルトの名無しさん
2009/02/20(金) 01:23:41別場所に同じ文字列があったりしたらコンパイラが配置の最適化できると思ったんだけど
0016デフォルトの名無しさん
2009/02/20(金) 01:28:02配列の配列と勘違いしてるし
仮に配列の配列だとしても要素配列の間にパディングが入らない保障はない(滅多にないだろうけど)
0017デフォルトの名無しさん
2009/02/20(金) 01:41:48パディングとか関係なく、連続で取られる保証はないし、
順番がソースコードの出現順である保証も全然ないし、
ありえないにも程がある
0018デフォルトの名無しさん
2009/02/20(金) 02:03:580019デフォルトの名無しさん
2009/02/20(金) 02:04:16実際にやってみなよ。"red,", "red", "blue", "green", "blue"みたいに重複が発生するように。
それでもあんたが主張するようにしか配置されていないのだとしたら、あんたの使っているコンパイラが蛸だ。
0020デフォルトの名無しさん
2009/02/20(金) 02:05:54>14のことなら、今背伸びしたいお年頃なんでしょ。
0021デフォルトの名無しさん
2009/02/20(金) 02:13:02>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];
これで
0022デフォルトの名無しさん
2009/02/20(金) 02:17:57char *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の違いに気を付けてね。
0023デフォルトの名無しさん
2009/02/20(金) 02:26:17char* pc;
pc = color_name[1];
for(i = 0; *(pc + 1) != '\0'; pc++);
では駄目なん?
0024デフォルトの名無しさん
2009/02/20(金) 02:28:320025デフォルトの名無しさん
2009/02/20(金) 02:28:40/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ まピョーん☆
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0026デフォルトの名無しさん
2009/02/20(金) 02:28:52寝ぼけているな俺
0027デフォルトの名無しさん
2009/02/20(金) 02:31:200028デフォルトの名無しさん
2009/02/20(金) 03:21:360029デフォルトの名無しさん
2009/02/20(金) 03:24:180030デフォルトの名無しさん
2009/02/20(金) 04:33:10しかしそのままずっと勘違いするよりはマシかもな
0031℃素人
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」です。
0032デフォルトの名無しさん
2009/02/20(金) 09:07:332はアドレス同士の計算で返った結果のサイズ(アドレスのサイズ)を表示してるから。
0033℃素人
2009/02/20(金) 09:29:37しかし、�@のプログラムでも"ポインタ"のアドレスの計算を
しているワケですので、私の32bit環境ではポインタとして
4byteをメモリに占めているので"4"が返ってきても良いとは
思うのですが・・・すみません。
0034デフォルトの名無しさん
2009/02/20(金) 09:31:17その結果が正しいとして...
MSC++では、アドレスは4バイト単位みたいな感じ
ポインタは32ビットで表記するのにね。
0035デフォルトの名無しさん
2009/02/20(金) 09:35:59ポインタ同士の引き算は、実際のアドレス値ではなくポイント対象の距離になる。
例えばこれらはどれも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行目の表現は、「アドレスのサイズ」ではなく「ポインタのサイズ」とするべき。
0036℃素人
2009/02/20(金) 09:50:00ありがとうございます。
ちょっとこれから出かけてきますので、
また後ほど。
0037デフォルトの名無しさん
2009/02/20(金) 09:51:34といつでも解釈して貰えると思ったらそれは違うだろ
0038やれやれだぜ
2009/02/20(金) 09:56:26& foo[1] - & foo[0]
を等価の式に変換してごらん。
pointer[integer]は*(pointer + integer)と相互に置き換えが可能だから、
& pointer[integer]は&*(pointer + integer)になる。後は判るだろ。
0039デフォルトの名無しさん
2009/02/20(金) 10:45:50typedef 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 のようにするの?
普段、クラスはおろか構造体すら使わないので忘れてしまった。
どうでもいいけど、構造体ってコンストラクタを持てるんだね。初めて知った。
0040デフォルトの名無しさん
2009/02/20(金) 10:48:05>どうでもいいけど、構造体ってコンストラクタを持てるんだね。初めて知った。
そりゃあんた、言語が違いまんがな。
0041476
2009/02/20(金) 11:44:39int 型の変数へのポインタ値をしまうことのできるポインタ型変数 p が宣言される
これはつまり、int ball;があったとしたら
int型の変数(ball)のメモリアドレスの値(aのアドレス)をしまうことができる ポインタ*pってことでいいんですか?
日本語力とか言いますが一般人にはわかりずらいと思います
int a; a は intである では無く a は int型である のほうがわかりやすいと思いますし
int *a[10]; a は、intへのポインタの配列(要素数10)である。 これだと aはint型の配列を代入できるポインタとかでいいんですか?
ごっちゃになってるので誰か詳しくまとめてくれるとありがたいです。
0042デフォルトの名無しさん
2009/02/20(金) 11:48:32しかし仕事で構造体を使わないCプログラムを書いたこと無いんだが、
>>39はどういう分野の人なのかな。
あと476はもう結構
0043デフォルトの名無しさん
2009/02/20(金) 11:50:12対象は一般人じゃなくてプログラマだからそれで良いんだよ。
>これだと aはint型の配列を代入できるポインタとかでいいんですか?
よくない
0044デフォルトの名無しさん
2009/02/20(金) 11:55:43{
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らしいんですが
どう直せばいいのでしょうか?
0045476
2009/02/20(金) 11:58:46私の環境ではコンパイラできました
たぶん他のコードでエラーがおこってるのかもしれません
004644
2009/02/20(金) 12:01:210047デフォルトの名無しさん
2009/02/20(金) 12:16:23ホンニャクすると
こんだけのソースで仕事できっかよ!ゴラ
0048デフォルトの名無しさん
2009/02/20(金) 13:45:30まともな日本語力のある人間は
「ポインタ値」を勝手に「メモリアドレスの値」に変更したり
「変数(ball)」を「a」に変更したりしない
あとここはお前の読んでいる本の訂正をしてくれる場所じゃない
0049デフォルトの名無しさん
2009/02/20(金) 14:03:40いい加減に自立しろよ
親にでも聞け
0050デフォルトの名無しさん
2009/02/20(金) 14:39:01char 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つのみで
すべての処理を行いたいと考えております。どうしたらよろしいのでしょうか?
0051デフォルトの名無しさん
2009/02/20(金) 14:43:20配列の中身は関係ない。問題は配列の大きさと読み込む文字数にある。
fgets(select, 2, stdin);
この命令は、stdinから1バイトしか読み込まない。
つまり、Enterキーを叩いたときの\nはストリームに残ったままとなる。
次のfgetsではその\nだけが読み込まれる。
配列のサイズと読み込み文字数を増やすこと。
0052476
2009/02/20(金) 14:59:35int (*p)[2];
p=u;
u[10]を2次元配列として扱いたいんですが
p=u;とやっても u[5][2]みたいな感じになりません
どうすればよろしいのでしょうか?
0053デフォルトの名無しさん
2009/02/20(金) 15:00:36論理的な思考のできない人間がプログラミングやるのはあきらめてください
0055デフォルトの名無しさん
2009/02/20(金) 15:11:24君にそれはそのまま当てはまるかもしれんぞ
0056デフォルトの名無しさん
2009/02/20(金) 15:23:54typedef 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 やマクロに進むまで配列やポインタはひとまずフリーズ
したらどーだ?
0057デフォルトの名無しさん
2009/02/20(金) 15:26:040058デフォルトの名無しさん
2009/02/20(金) 15:26:08ポインタ苦手あんですが
ポインタってそこまで重要しなくていいんですか?
やっぱポインタがわからないとダメですか?
プロの方とかはポインタとか沢山使ってるのでしょうか?
仕組みとかわからないとむかつきます。丸暗記みたいにつめこむのがやなので
0059デフォルトの名無しさん
2009/02/20(金) 15:29:41君はprintfがどのような事をやっているかわかっているの?
int a = 1;がどのような処理を行っているかわかってるの?
0060デフォルトの名無しさん
2009/02/20(金) 15:41:58仕組みがわからない段階で
それを使って人に使わせるのが嫌という心は健全だと思うね。
最低でもそのコンパイラが病気かどうかぐらいは診断できる
位のスキルが無ければ(つまり出力コードを見てその善し悪しを
判断できる)本来、コンパイラを使ってプログラムを製造し
人に販売するような行為を行うのは安全じゃない。
(それ言い出せば、今度はプロセッサが正常か、メモリが正常か
テスト出来なければNGとかになってお話にならないが)
ただ仕組みはわかったとしても一通りじゃないから、趣味や自己啓発
でやる限り、仕組みというよりか基本感覚みたいなものを感じ取れ
ればいいんじゃないのかな?
0061デフォルトの名無しさん
2009/02/20(金) 15:42:04int (*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] );
}
}
0062デフォルトの名無しさん
2009/02/20(金) 16:09:090063デフォルトの名無しさん
2009/02/20(金) 16:28:58問題です
1.int a; &aは、ポインタでしょうか?
>>476がんばってくれ。
↓参考
#include<stdio.h>
int main(){
printf( "476を応援 %d \(^O^)/%sTEL\n"+0XA,0x1dc,'-'/'-'+"POW\bWAT\b");
return 0;
}
0064デフォルトの名無しさん
2009/02/20(金) 18:08:53int 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の言ってる通り、先に進むのがいいんじゃない?
前スレをきちんと保存しておいて、後で読み返せるようにしとくのがいいと思うよ
0065デフォルトの名無しさん
2009/02/20(金) 18:09:10プログラミングは未経験です。
どっちがわかりやすいですか?
0066デフォルトの名無しさん
2009/02/20(金) 18:11:190067デフォルトの名無しさん
2009/02/20(金) 18:26:44本気で、Javaの基礎から勉強する、とか。もちろん、CだけとかC→C++で全部やっててもいいんだけど、
最初やるべきは、Cの概論じゃない?
0068デフォルトの名無しさん
2009/02/20(金) 18:28:560069デフォルトの名無しさん
2009/02/20(金) 18:36:04PSPの開発言語は基本はC言語って聞いたことがある
DSはわからない
0070デフォルトの名無しさん
2009/02/20(金) 18:39:400071デフォルトの名無しさん
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;
}
0072デフォルトの名無しさん
2009/02/20(金) 19:04:49typedef 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;
}
どのように記述すれば良いのでしょうか?よろしくお願いします。
0073デフォルトの名無しさん
2009/02/20(金) 19:10:47matA = matalloc(3, 4); // 3*4の行列を作る関数です
matA->data[0][0] = 1.0;
matA->data[0][1] = 1.5;
・・・
//この時点では、ちゃんと matA 内にデータが入っています。
return matA;
}
引数書き換えても反映されるわけねーだろ
0074デフォルトの名無しさん
2009/02/20(金) 19:13:02(*matA) = matalloc(3, 4); // 3*4の行列を作る関数です
(*matA)->data[0][0] = 1.0;
(*matA)->data[0][1] = 1.5;
・・・
//この時点では、ちゃんと matA 内にデータが入っています。
return;
}
呼び出し方法変わるけどこれでも
0075デフォルトの名無しさん
2009/02/20(金) 19:17:04大昔はmallocの返り値が(char*)だったらしいからその対策と思われる
0076デフォルトの名無しさん
2009/02/20(金) 19:17:59if(p==NULL)○
if(!p) 邪悪
なんの為に(char*)してるのか?
そのallocならばmallocをラップしてるだけで意味は薄い。
別のmalloc関数を使いたくてALTERの意味でラップしているの
かも知れないが.
malloc系のメモリを内部で確保して加工したものを返す関数
は個人的開発の場合多用すると何かと便利だが、集団開発を
前提とした開発の場合は多分タブー。
それ以前にmallocを多用するプログラムはCよりかC++
Javaのほうが向いている。(new/delete)
>>72
MATRIXじゃなくてpMATRIXという名前にすれば
*もしかしたら*間違えなかったかも
0077デフォルトの名無しさん
2009/02/20(金) 19:18:33マクロでデバッグのときだけ別の関数を呼ぶようにしてるとか、
コンパイル時に別のソースファイルに切り替えるとか。
多分将来の機能追加かデバッグ目的とか。
あと、malloc()の戻り値もpと同じ型だから、malloc()のキャストは削除した方がいい。
しかも、CではC++と違ってvoid *とその他の記憶領域へのポインタはキャストせずに相互代入可能だし。
作った人が変なだけかもしれない。
0078デフォルトの名無しさん
2009/02/20(金) 19:21:52なるほど。参考になりました。
0079デフォルトの名無しさん
2009/02/20(金) 19:32:08それって、void*型が無かったころの話じゃないの?
void* 型が導入されたけど、mallocの返り値はchar*のままっていう時代があったの?
0080デフォルトの名無しさん
2009/02/20(金) 19:35:37>if(p==NULL)○
>if(!p) 邪悪
君の好みなんか誰も聞いてません
元ソースはバカだけど
0081デフォルトの名無しさん
2009/02/20(金) 19:38:58以下はfreeを用いた加工関数だが、freeした後にNULL代入しておくと
二重freeの防止に役立つ。
void nfree(void *p)
{
free(p);
p = NULL;
}
0082デフォルトの名無しさん
2009/02/20(金) 19:40:28突然なにを?w
0083デフォルトの名無しさん
2009/02/20(金) 19:41:48どんな冗談w
0084デフォルトの名無しさん
2009/02/20(金) 19:43:28アホだなぁw
0086デフォルトの名無しさん
2009/02/20(金) 19:45:16本当に分からないのかよ・・・・・・w
0087デフォルトの名無しさん
2009/02/20(金) 19:47:06void 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;
}
0088デフォルトの名無しさん
2009/02/20(金) 19:47:350089デフォルトの名無しさん
2009/02/20(金) 19:47:400090デフォルトの名無しさん
2009/02/20(金) 19:48:18みなさん、ありがとうございました。
希望通りの動作をしました。
まだポインタについて理解が足りないようです。
0091デフォルトの名無しさん
2009/02/20(金) 19:50:59#define nfree(p) do { free(p); p = NULL; } while (0)
0092デフォルトの名無しさん
2009/02/20(金) 19:57:14出直してきます
0093デフォルトの名無しさん
2009/02/20(金) 19:58:27ただのスコープの話じゃん
0094デフォルトの名無しさん
2009/02/20(金) 20:00:340095デフォルトの名無しさん
2009/02/20(金) 20:19:000096デフォルトの名無しさん
2009/02/20(金) 20:25:580097デフォルトの名無しさん
2009/02/20(金) 20:49:23(C言語では)引数は常に変数のコピーが渡される。
だからポインタ(型変数)のアドレスを貰わないと、書き換えできない。
風呂で携帯レスはダリア
ところでK&Rの初版だと二次元配列を引数にするときは、
列を省略するな、みたいな事が書いてあったけど、
ANSIってどうなってるの?msc3以降コンパイルしたこと無いからわかるん
0098デフォルトの名無しさん
2009/02/20(金) 20:53:09省略できません
0099デフォルトの名無しさん
2009/02/20(金) 21:03:00C99には int x[][*]
見たいなのがあるよ
0100℃素人
2009/02/20(金) 23:12:59遅くなりましたが、ありがとうございました。m(_ _)m
あれから、色々と試してみて理解できました。
それにしても、Cのコンパイラの解釈って・・・orz
0101デフォルトの名無しさん
2009/02/21(土) 00:02:06何を思ったか知らんけどたぶんその感想は的外れだ
0102476
2009/02/21(土) 00:05:16ラスボスを無視して進でこうかと思います
次へ進んでいくと 再帰とか構造体とか中ボスがでてきそうでやです
0103℃素人
2009/02/21(土) 00:13:20何が的外れなのでしょうか?
アドレス減算の件でしょうか?
sizeof演算子によって得られるポインタ型のサイズの件でしょうか?
ご指摘お願いします。
0104デフォルトの名無しさん
2009/02/21(土) 00:17:10Cは型にうるさく無いから、何でも適当に融通を効かせて許容してく
れるという誤解が通用しているがこれは絶対に忘れたほうがいい。
C位型にうるさい言語は無い。
型が間違っている場合は処理系に強く依存した
*勝手な解釈で*キャストして稀に致命的な結果をもたらすコードを
平然と吐く。それがたまたま幸運な方向にいくことが多いから
上記のような誤解が発生する。
残念ながら処理系によっては
#define NULL 0
としているものがあるが
#define NULL ((void*)0)
が正しい。
if( p==((void*)0))は期待した通り動作するだろう。
しかし
if( !p)は
if( !((int)p) )という意味になるが、NULLのint変換値が0でない処理系では
全く期待した動作にはならない。
0105デフォルトの名無しさん
2009/02/21(土) 00:22:420106デフォルトの名無しさん
2009/02/21(土) 00:24:190107デフォルトの名無しさん
2009/02/21(土) 00:28:520108デフォルトの名無しさん
2009/02/21(土) 00:30:35それはおかしい。
!pとp==((void*)0)は同じ結果になる。さらに、p==0でも同じだ。もちろんNULLの表現が0でなかったとしても。
(void*)0でもただの0でも、この場合、pと同じポインタ型に変換される決まりで、
整数定数の0をポインタに変換すれば、ヌルポインタになる。
だから#define NULL 0も問題ない。
((void*)0)にする理由としては、ポインタでないintやcharに対して使おうとするアホを吊るしあげるためのほうが大きい。
0109デフォルトの名無しさん
2009/02/21(土) 00:33:395.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
0110デフォルトの名無しさん
2009/02/21(土) 00:34:32も
ptr==int
もptrに換算して比較される?
逆だろ?
0111デフォルトの名無しさん
2009/02/21(土) 00:37:06Cではポインタが来ると考えられる場所に整数定数0を書いたら必ずヌルポインタに置き換わる。
換算される=内部表現が0のポインタがヌルポインタなのではない。
0112デフォルトの名無しさん
2009/02/21(土) 00:38:400113デフォルトの名無しさん
2009/02/21(土) 00:40:170114デフォルトの名無しさん
2009/02/21(土) 00:41:180115デフォルトの名無しさん
2009/02/21(土) 00:42:12>>105もおかしい
>>107はちょっと古い
0116デフォルトの名無しさん
2009/02/21(土) 00:42:29NULLは整数の0と等しい。たとえNULLのビット表現がALL0でなくても、だ。
0117デフォルトの名無しさん
2009/02/21(土) 00:42:53って処理系みたことあるぞ
0118デフォルトの名無しさん
2009/02/21(土) 00:44:42そりゃそいつがANSI準拠でないというだけの話。
ちなみに、規格合致したければ、Cのソースコード上は0にしておいて、
コンパイラの中でよろしくやってくれるようにしないといけない。
0119デフォルトの名無しさん
2009/02/21(土) 00:46:00NULLの定義は処理系独自の実装でもよいことになっているので、そういうこともありえる
しかしそのような処理系であっても、NULL==0は真にならなければ規格違反になる。
0120デフォルトの名無しさん
2009/02/21(土) 00:48:010121デフォルトの名無しさん
2009/02/21(土) 00:49:040122デフォルトの名無しさん
2009/02/21(土) 00:58:02間違っている。ヌルポインタをintにキャストしたらその式が真になる保障はない。
もう一度説明しよう。比較や代入でポインタ式が必要とされる場所に整数定数0を書いたら、
コンパイラはそれをヌルポインタ値に置き換える。
だからもし(void*)(-1)がヌルポインタとなる処理系があったとしたら、
(void*)(-1)==0 は真になる。しかしその前にヌルポインタをintにキャストしてしまったら、
このコンパイラによる置き換えは発生しない。恐らく結果は真にならないだろう。
0123デフォルトの名無しさん
2009/02/21(土) 01:00:170124デフォルトの名無しさん
2009/02/21(土) 01:01:46絶対に、どんなオブジェクトも関数も指し示していないことが保障されている特別なポインタの値
0125デフォルトの名無しさん
2009/02/21(土) 01:02:400126デフォルトの名無しさん
2009/02/21(土) 01:06:32Windowsだと0x00000000から0x0000FFFFまでがNULL
0127デフォルトの名無しさん
2009/02/21(土) 01:06:57ある型についてのヌルポインタ値はひとつしかない(でないと比較ができない)
型ごとにヌルポインタ値があるかどうかは未規定
0128デフォルトの名無しさん
2009/02/21(土) 01:09:23という意味での保証なのかってことだろな
0129デフォルトの名無しさん
2009/02/21(土) 01:10:19何でそんなにあるんだろう。
それなら0xFFFFFFFFから0xFFFF0000もNULLにすればいいのにね。
0130デフォルトの名無しさん
2009/02/21(土) 01:10:260131デフォルトの名無しさん
2009/02/21(土) 01:11:24ヌルポインタとはまた別なものでは、それ
0132デフォルトの名無しさん
2009/02/21(土) 01:14:05>109にソースまで出ているのに何を言っているんだ
0133デフォルトの名無しさん
2009/02/21(土) 01:18:12さすがに >>109は有名じゃないのか?w
0134デフォルトの名無しさん
2009/02/21(土) 01:18:430135デフォルトの名無しさん
2009/02/21(土) 01:18:580136デフォルトの名無しさん
2009/02/21(土) 01:35:220137デフォルトの名無しさん
2009/02/21(土) 01:39:150138デフォルトの名無しさん
2009/02/21(土) 01:47:20int *p = NULL;なのにp[1]のようなことをやるおっちょこちょいなプログラムのためということが、
確かAdvanced Windowsに書いてあった。
だけどこれまで全部NULLというのは無理があると思う。
0139デフォルトの名無しさん
2009/02/21(土) 01:50:06いや、だから、p[-1]とかやるおっちょこちょいのために
0xFFFFFFFFから0xFFFF0000もNULLにした方がいいだろ?
0140デフォルトの名無しさん
2009/02/21(土) 01:53:42NULLポインタに代入するだけじゃなくindexまで…
0141デフォルトの名無しさん
2009/02/21(土) 01:55:59それでもNULLは定義されている。
0142デフォルトの名無しさん
2009/02/21(土) 02:19:55gettimeofday(&tv, NULL);
return tv.tv_sec * 1000 + (double)tv.tv_usec * 1e-3;
このときreturnで返ってくる値の単位がよくわかりません
0143デフォルトの名無しさん
2009/02/21(土) 02:22:000144デフォルトの名無しさん
2009/02/21(土) 02:40:510145デフォルトの名無しさん
2009/02/21(土) 02:41:570146デフォルトの名無しさん
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
0147デフォルトの名無しさん
2009/02/21(土) 03:21:06引数がレジスタ渡しだったり、逆順に評価していたり、引数のポップを呼ばれた側でやるような実装だったら、動かない可能性大。
引数の数(とそれぞれのサイズ)が同じか、ないやつなら、問題少なそうだが、それとて処理系依存だったような気がする。
0148デフォルトの名無しさん
2009/02/21(土) 03:41:42// 略
} S1;
typedef struct {
// 略
} S2;
S1 *sub(S1 *arg1, S1 *arg2);
だとして、こいつを
S2 (*sub2)(S2 *, S2 *) = (S2 (*)(S2 *, S2 *))sub;
ならありですかね?。
0149デフォルトの名無しさん
2009/02/21(土) 03:55:02関数ポインタのキャストは禁止
てゆーかそんな変換になにを望んでるんだ?
0150デフォルトの名無しさん
2009/02/21(土) 04:31:230151147
2009/02/21(土) 04:43:00関数ポインタのキャストが許されるなら、関数を他のモジュールにエクスポートする際にちと便利になる(引数をいちいちキャストせずに関数ポインタだけキャストすればすむ)状況があったのですが、禁止がならしかたないですね。
ありがとうございました。
0152デフォルトの名無しさん
2009/02/21(土) 07:34:59仕事で組み込みマイコン向けのC言語のプログラムを書かないといけなくなりました。
先輩の元ソースを修正するだけなのですが、その元ソースの動作が理解できません。
C言語の逆引き辞典のようなもので、お勧めの書籍はないでしょうか?
元ソースを解析できれば何とかなりそうなのですが。
0153デフォルトの名無しさん
2009/02/21(土) 08:55:28>>関数ポインタ
0154デフォルトの名無しさん
2009/02/21(土) 09:09:50putchar(c) 一文字出力する
gets,getc,putcとの違いをおしえてください。
混乱してきました。
0155デフォルトの名無しさん
2009/02/21(土) 09:23:07以上
0156デフォルトの名無しさん
2009/02/21(土) 09:25:21man getchar
man putchar
man gets
man getc
man putc
ttp://www.linux.or.jp/JM/index.html
0157デフォルトの名無しさん
2009/02/21(土) 09:26:34処理系依存×
プログラマ依存○
0158デフォルトの名無しさん
2009/02/21(土) 09:32:56「処理系」とかいう便利な小人さんでも存在するのか?
0159デフォルトの名無しさん
2009/02/21(土) 09:43:550160デフォルトの名無しさん
2009/02/21(土) 09:47:160161デフォルトの名無しさん
2009/02/21(土) 10:09:19態々例を挙げる必要は無い
0162デフォルトの名無しさん
2009/02/21(土) 10:10:490163デフォルトの名無しさん
2009/02/21(土) 10:27:31ところだろ。
0164デフォルトの名無しさん
2009/02/21(土) 10:30:30関数の外でint test=50;と定義したら、testは静的領域に確保されて、
そのときstatic宣言するとファイル内にスコープが限定されて、
他のファイルでextern宣言するとそのファイル内で使える、
であってますか?
0165デフォルトの名無しさん
2009/02/21(土) 10:30:360166デフォルトの名無しさん
2009/02/21(土) 10:32:23static付けたら外部参照できないよ。
0167デフォルトの名無しさん
2009/02/21(土) 10:40:530168デフォルトの名無しさん
2009/02/21(土) 12:59:53基本的にそりゃコンパイラのソース読まないと判断出来ないな。
少なくとも俺はマニュアルにそんな記述があるコンパイラは見たことがない。
0169デフォルトの名無しさん
2009/02/21(土) 13:02:050170デフォルトの名無しさん
2009/02/21(土) 14:39:22関数ポインタの配列を使った関数呼び出しをするよりもswitch文で呼び出す関数を分岐した方が保守性がよいので関数ポインタの配列を使った関数呼び出しは
するべきではないと思うの
0171デフォルトの名無しさん
2009/02/21(土) 14:42:40まともなデバッガ使え
0172デフォルトの名無しさん
2009/02/21(土) 14:45:33前者の方がマシだと思うの。前者だとグローバル変数を読み書きする変数名は実態そのものだからすぐ発見できるが後者だと実態に読み書きしている
変数名がばらばらになりがちでどこで読み書きしているかわけわかめになりがち。
0173デフォルトの名無しさん
2009/02/21(土) 14:46:18ろくなことにならない
関数ポインタ使って1行で済むなら、そっちの方がはるかにいい
0174デフォルトの名無しさん
2009/02/21(土) 14:55:54まともなデバッガ使え
0175デフォルトの名無しさん
2009/02/21(土) 15:05:180176デフォルトの名無しさん
2009/02/21(土) 15:13:46>>172
はグローバル変数がなんでだめなのかわかってないんじゃねーの?
後者もグローバル変数の使用で生じる害と同じことが起こるだろ
0177デフォルトの名無しさん
2009/02/21(土) 15:14:120178デフォルトの名無しさん
2009/02/21(土) 15:24:47>>172 の問題は、extern で受ける変数名がばらばらってとこだろう
そんなことするからおかしなことに
0179デフォルトの名無しさん
2009/02/21(土) 15:26:06>>172
そういったのはすべて対症療法よ。
根本療法じゃないんで。念のため。
患者さんによって違うわ
0180デフォルトの名無しさん
2009/02/21(土) 15:31:00いや、素直に読むと モジュール内から static変数のアドレスを渡す関数化なんか用意して
外部モジュールでハンドリングする事を想定した文書だ
困った用法を最悪の形で実装した例だな。
0181デフォルトの名無しさん
2009/02/21(土) 15:36:09なんてのもダメなわけね
0182デフォルトの名無しさん
2009/02/21(土) 16:04:380183デフォルトの名無しさん
2009/02/21(土) 16:09:10オブジェクト指向にはついていけなかったのか・・・
0184デフォルトの名無しさん
2009/02/21(土) 16:17:10だけで10000個以上あります。
整理しろと言われました。(ただし数は減らせません)
どのようにすればいいでしょうか?
0185デフォルトの名無しさん
2009/02/21(土) 16:27:110186デフォルトの名無しさん
2009/02/21(土) 16:27:50・泣きつく
・せめて構造体に放り込む
0187デフォルトの名無しさん
2009/02/21(土) 16:29:56複数プロセスに分割する、
structをネストして階層化する等いろいろあるだろ
0188デフォルトの名無しさん
2009/02/21(土) 16:32:050189デフォルトの名無しさん
2009/02/21(土) 16:35:26とりあえず static にしてみろ。
0190デフォルトの名無しさん
2009/02/21(土) 16:36:00え?
0191デフォルトの名無しさん
2009/02/21(土) 16:36:00あんたは先ず、眼科に行く必要がありそうだな。
0192デフォルトの名無しさん
2009/02/21(土) 16:39:500193デフォルトの名無しさん
2009/02/21(土) 16:43:110194デフォルトの名無しさん
2009/02/21(土) 16:51:40とりあえずstaticにして関数を通じて操作させるようにして
モジュール性を持たせるのがせいぜいだろう。
0195デフォルトの名無しさん
2009/02/21(土) 17:07:030196デフォルトの名無しさん
2009/02/21(土) 17:08:160197デフォルトの名無しさん
2009/02/21(土) 17:11:37操作してる部分を全てゲッター、セッターに変更することにどれほどの意味があるのだろう。
グローバル変数がグローバル関数もしくはグローバルオブジェクトになるだけじゃね
0198デフォルトの名無しさん
2009/02/21(土) 17:17:380199デフォルトの名無しさん
2009/02/21(土) 17:18:41???
0200デフォルトの名無しさん
2009/02/21(土) 17:19:170201デフォルトの名無しさん
2009/02/21(土) 17:39:590202デフォルトの名無しさん
2009/02/21(土) 17:41:240203デフォルトの名無しさん
2009/02/21(土) 17:51:500204デフォルトの名無しさん
2009/02/21(土) 18:16:09ビット演算子(&、|、^、<<)について処理自体はシンプルなので理解できたと思うのですけど
実際どんな場面で使用されるのかピンと来なくて消化できた気がしません・・・
どんな場面で使用するとその有用性が理解できるかどなたかご教授願います
0205デフォルトの名無しさん
2009/02/21(土) 18:23:460206デフォルトの名無しさん
2009/02/21(土) 18:24:59true colorの番号を赤緑青に分解したり
^を使えば黒<->白になるので背景と必ず逆の色が指定できて便利だったり
0207デフォルトの名無しさん
2009/02/21(土) 18:33:03ただのメモリ節約とかそういう感じ?
0208476
2009/02/21(土) 18:39:25再帰使うと聞いた事あるんですが、画面をクリアするってききましたが。
やっぱりポインタができてないとテトリスはつくれないんですか?
あと構造体
0209デフォルトの名無しさん
2009/02/21(土) 18:41:22遅レスすみません
特殊な状況(あくまで自分の視点)で使うことが有るんですね
ありがとうございました
0210デフォルトの名無しさん
2009/02/21(土) 18:41:43それよりもアルゴリズム考えるの頑張れ
0211476
2009/02/21(土) 18:48:26アルゴリズムの本もってます
アルゴリズム事典 数学的で難しい事ばっかりかかれてます
なんか頑張れっていわれるとうれしいですありがとうございます。
CUI RPGでマップ表示までできます 後主人公うごかせました
ですが壁とか通り抜けたりしました。RPGとかの壁にぶつかったとき壁をすりぬけないとか
そういう判定とかのってるページありますか?
0212デフォルトの名無しさん
2009/02/21(土) 18:59:070213デフォルトの名無しさん
2009/02/21(土) 19:02:080214デフォルトの名無しさん
2009/02/21(土) 19:20:160215476
2009/02/21(土) 19:42:31パックマンはレベル高そうです
もし私が一通りファイルの扱いや構造体を覚えたらどんなゲームを作るのがおすすめですか?
簡単なアルゴリズムのゲームなどあったら教えてくださいお
0216デフォルトの名無しさん
2009/02/21(土) 19:44:460217デフォルトの名無しさん
2009/02/21(土) 19:44:540218476
2009/02/21(土) 19:56:42石取りゲームとか頭すごいつかいそうなのでちょっとやです
シューティングは楽しそうです シューティングとオセロのほかにありますか?
0219デフォルトの名無しさん
2009/02/21(土) 19:58:320220デフォルトの名無しさん
2009/02/21(土) 20:02:07それ位も作れないならやめろ
0221デフォルトの名無しさん
2009/02/21(土) 20:02:18スレ違い
いい加減ウザいよお前。
0222デフォルトの名無しさん
2009/02/21(土) 20:02:470223デフォルトの名無しさん
2009/02/21(土) 20:17:46それができないなら言語そのものの学習が上手く言ってないから
勉強しなおし
ちなみにテトリスはHSP(ポインタや構造体がなく、再起数にも制限がある)でも
作れる
0224デフォルトの名無しさん
2009/02/21(土) 21:38:420225デフォルトの名無しさん
2009/02/21(土) 21:43:43うざい
マスかいて寝ろ
0226デフォルトの名無しさん
2009/02/21(土) 22:36:31先頭に、/* Copyleft. you are freelly modify, or rewrite, .... */ とか書いて、インターネットやnyに放流。
有用なソフトなら、誰かが改変、改良してくれるだろうから、1年後に捕獲、回収。
クズソフトなら、書いた奴が激しく責められ、なぜだめなのか、もうどうすることもできないのか、
などコメントされるだろうから、それを、そっと他人のふりして、上司に見せる。
0227デフォルトの名無しさん
2009/02/21(土) 22:45:07はい。
0228デフォルトの名無しさん
2009/02/21(土) 22:51:25インターネットやnyに放流するプログラムを作ればそのうち著作権なんて馬鹿らしくなってくるんじゃないでしょうか?
0229デフォルトの名無しさん
2009/02/21(土) 23:13:18この英語は釣りですか?
0230デフォルトの名無しさん
2009/02/21(土) 23:19:120231デフォルトの名無しさん
2009/02/22(日) 00:01:23東京大学プログラミングコンテスト2008
http://www.utpc.jp/2008/
0232デフォルトの名無しさん
2009/02/22(日) 00:08:11ビット計算は速い。
例えば最短ルートを探索する問題で32bitないし64bitで状態を記述してビット計算で解析する方が
普通に配列つくってループまわすよりダンチに速い。
もちろん単純なビット計算で状態遷移できるように工夫することが前提な。
ビット計算をループで回しとったら(それでも配列より速いかもしれんが)あんま効果ないで。
0233デフォルトの名無しさん
2009/02/22(日) 00:09:300234デフォルトの名無しさん
2009/02/22(日) 05:16:59ループ回す場合とループ回さない場合、ループ回さない方が速い
って言ってるだけでビット演算が速いことになってない。
0235476
2009/02/22(日) 10:46:40#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が出る理由はなんですか?
教えてください
0236デフォルトの名無しさん
2009/02/22(日) 10:50:330237デフォルトの名無しさん
2009/02/22(日) 10:50:540238デフォルトの名無しさん
2009/02/22(日) 10:53:24だーら、typedef覚えてからにしろっつっただろ〜
0239デフォルトの名無しさん
2009/02/22(日) 15:26:250240デフォルトの名無しさん
2009/02/22(日) 15:57:46476よりバカがいたw
0241デフォルトの名無しさん
2009/02/22(日) 17:19:56違います
0242デフォルトの名無しさん
2009/02/22(日) 17:42:310243デフォルトの名無しさん
2009/02/22(日) 18:38:170244 ◆YjsWqh8B4w
2009/02/22(日) 19:23:00int 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等の円周率と離れた数値になってしまいます。
このプログラムの内容をなるべく変更しないで正しい値に近い円周率を出すためには、
どうしたらいいでしょうか。
協力お願いします。
0245デフォルトの名無しさん
2009/02/22(日) 19:29:080246デフォルトの名無しさん
2009/02/22(日) 19:31:570247デフォルトの名無しさん
2009/02/22(日) 19:33:23試しにすべてのポイントで計算して見てごらん
0248デフォルトの名無しさん
2009/02/22(日) 19:41:07#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;
}
こんなかんじでどうだろうか
0249デフォルトの名無しさん
2009/02/22(日) 19:45:40aもdoubleにしろ。
32767とマジックナンバーを書くな。RAND_MAX使え。
b = の右側の4を4.0にしろ。
0250デフォルトの名無しさん
2009/02/22(日) 19:53:01#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;
}
0251デフォルトの名無しさん
2009/02/22(日) 19:54:49わからんことは聞いておいた方がいいんじゃないか?
0253デフォルトの名無しさん
2009/02/22(日) 20:58:24でもいいよ
0254デフォルトの名無しさん
2009/02/22(日) 21:30:51>>int n2 = 0, a;
なんかさ、相関のないものをこういう風にまとめるのって
頭おかしいんじゃないかと思う
ちなみに、プログラムがおかしい原因は intとdoubleの混在。
rand()をdoubleでキャストしたときの知恵を他にも回せ
0255デフォルトの名無しさん
2009/02/22(日) 21:49:34(自分も含めて)ゆとりは高校でarcsinとかを習わないからなあ
一言、sinの逆関数ですよって説明するだけなのになぜ省かれたのだろう
0257デフォルトの名無しさん
2009/02/22(日) 22:31:17モンテカルロ法を議論する場合は三角関数の一定以上の学識は必須。
したがってモンテカルロ法がプログラミングの例題として適しているかどう
か今一度議論されてしかるべきということになる
0258デフォルトの名無しさん
2009/02/22(日) 22:51:310259デフォルトの名無しさん
2009/02/22(日) 22:53:410260デフォルトの名無しさん
2009/02/22(日) 22:59:28でも2年も使ってれば一度くらいお目にかかるだろ
0261デフォルトの名無しさん
2009/02/22(日) 23:09:38オレんとこはオバカ学校だったけど、時間配分半分とか見ると、愕然とするな。
0262デフォルトの名無しさん
2009/02/22(日) 23:13:320263デフォルトの名無しさん
2009/02/22(日) 23:43:58専攻が物理だったからかなぁ
0264デフォルトの名無しさん
2009/02/23(月) 00:05:400265デフォルトの名無しさん
2009/02/23(月) 00:35:170266デフォルトの名無しさん
2009/02/23(月) 01:23:560267デフォルトの名無しさん
2009/02/23(月) 01:25:160268デフォルトの名無しさん
2009/02/23(月) 01:38:34無関係
0269デフォルトの名無しさん
2009/02/23(月) 01:59:45#define MAKE_AAASTRUCT() AaaStruct a##__COUNTER__
MAKE_AAASTRUCT()を実行すると、自動的にAaaStruct a1, AaaStruct a2, AaaStruct a3,,,となって欲しいのですが、うまくいきません。
どのようにしたら良いのでしょうか、、、
0270デフォルトの名無しさん
2009/02/23(月) 02:06:22マクロは実行するものではなく置換するものであることを忘れないこと。
Cプリプロセッサに変数という概念は無い。
よって置換を行うたびに動作を変えるようなマクロもありえない。
任意個数の異なるオブジェクトの実体が必要なら、メモリを動的に割り当てる方法を試すこと。
0271269
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__)
0272デフォルトの名無しさん
2009/02/23(月) 02:14:02#define MAKE_AAASTRUCT_SUBSUB(COUNTER) AaaStruct a##COUNTER
#define MAKE_AAASTRUCT_SUB(COUNTER) MAKE_AAASTRUCT_SUBSUB(COUNTER)
#define MAKE_AAASTRUCT() MAKE_AAASTRUCT_SUB(__COUNTER__)
0273デフォルトの名無しさん
2009/02/23(月) 02:19:570274デフォルトの名無しさん
2009/02/23(月) 02:33:03普通に配列でいいじゃん
0275デフォルトの名無しさん
2009/02/23(月) 02:33:220276269
2009/02/23(月) 02:44:43適当なブロックの先頭で宣言して、ブロックから外れたらデストラクタが動いてくれるような、あくまで一時的なクラスの名前付けをラクしたかったので、、、
0277269
2009/02/23(月) 02:45:150278デフォルトの名無しさん
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
0279デフォルトの名無しさん
2009/02/23(月) 07:37:02プログラムつくって変数にアドレス振る時とか、0x0000000とかだとふれませんよね
0280デフォルトの名無しさん
2009/02/23(月) 08:01:27おまえが振るわけじゃないから、そんなことは考えなくても大丈夫
0281デフォルトの名無しさん
2009/02/23(月) 10:35:460282デフォルトの名無しさん
2009/02/23(月) 10:45:100283デフォルトの名無しさん
2009/02/23(月) 13:06:31すでに問題解決の方向が間違ってる
0284デフォルトの名無しさん
2009/02/23(月) 13:30:19知りたくもないことまで知らなければならなくなる
状況が時々発生するのがWindows開発
だからWindows開発は初心者向けじゃ絶対にない
0285デフォルトの名無しさん
2009/02/23(月) 13:33:10の一言ですむだろう
0286デフォルトの名無しさん
2009/02/23(月) 13:41:35IsBadReadPtr/IsBadWritePtr系APIを使えば?
標準Cライブラリにその手の関数は無いが
0287デフォルトの名無しさん
2009/02/23(月) 13:43:33リンクのMAPを出力すれば大体わかる
0288デフォルトの名無しさん
2009/02/23(月) 13:52:250289デフォルトの名無しさん
2009/02/23(月) 14:02:100290デフォルトの名無しさん
2009/02/23(月) 14:28:190291デフォルトの名無しさん
2009/02/23(月) 14:48:37API使う
0292デフォルトの名無しさん
2009/02/23(月) 14:49:31int i;
int *p = x[0]; /* x[0] は、最初のデータへのポインタである。 */
/* だからその型は int * なので、代入できる。 */
0293デフォルトの名無しさん
2009/02/23(月) 15:00:25要素を変更するプログラムについて、
char array[] = "hoge\n";
array[2] = 'G';
これはOKなのですが、
char *str = "hoge\n";
str[2] = 'G';
はセグメンテーションエラーになります。
何でですか?
0294デフォルトの名無しさん
2009/02/23(月) 15:02:350295デフォルトの名無しさん
2009/02/23(月) 15:03:26ありがとうございました。
0296デフォルトの名無しさん
2009/02/23(月) 15:24:480297デフォルトの名無しさん
2009/02/23(月) 15:34:480298デフォルトの名無しさん
2009/02/23(月) 15:35:51BCCだとエラ−にならずに書き換えできたりするんだよな
0299デフォルトの名無しさん
2009/02/23(月) 15:36:32そんなもの知る必要の無い仕事のほうが圧倒的に多いし
少なくともそれはCの言及する範囲の話題ではない
0300デフォルトの名無しさん
2009/02/23(月) 17:30:38全てscanf("%s",tmp); と受け取って後で処理する事?
0301デフォルトの名無しさん
2009/02/23(月) 17:35:530302デフォルトの名無しさん
2009/02/23(月) 17:43:08アホ
0303デフォルトの名無しさん
2009/02/23(月) 17:51:27scanf("%d",&a); は文字入れた瞬間にいかれちゃうんで
scanf("%s",&str); ->strを整数や実数へとしてるんですが
scanfはバグが多いと、よく聞きます。
より良い方法や、数値などのより(バグの無い)効率の良い方法とかって、ありますか?
0304デフォルトの名無しさん
2009/02/23(月) 17:54:380305デフォルトの名無しさん
2009/02/23(月) 18:06:45扱いづらい面が多いだけで
>>303
改行がバッファに残る、バッファオーバーラン等の対処などから、
fgetsしたものをsscanf, atoi, strtol等を使って解析するのが定石
0306デフォルトの名無しさん
2009/02/23(月) 18:10:49forkすると、スレッドとプロセス生成でややこしくなります。
マルチスレッドとforkは混ぜるな危険でしょうか?
0307デフォルトの名無しさん
2009/02/23(月) 18:15:440308476
2009/02/23(月) 18:18:53数字などを入れるときはscanf以外の関数はあるんですか?
なぜだめなんですか?
0309デフォルトの名無しさん
2009/02/23(月) 18:28:19wikipediaでscanfを調べてみなさい
0310デフォルトの名無しさん
2009/02/23(月) 18:30:02どういう意味ですか?
0311デフォルトの名無しさん
2009/02/23(月) 18:33:06マルチスレッドでforkするときはいろいろお約束があるけど、
呼んじゃいけない関数を呼ぶ前にexecしてしまえば問題が出ない。
0312デフォルトの名無しさん
2009/02/23(月) 19:03:45fgetsって、ファイルだけかと思って、
ファイル入力&読み出しとかめんどくさいし、ゴミも・・・・・
と思ったら、ファイルポインタにstdin指定が出来るんですね。
get〜 にも悩まされずに済みそうです。 ありがとうございました。
0313デフォルトの名無しさん
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]);
}
0314デフォルトの名無しさん
2009/02/23(月) 21:22:27char *fruits[]={"apple", "orange", "kiwi"};
を
char fruits[][300]={"apple", "orange", "kiwi"};
にしたらどうかしら
0315デフォルトの名無しさん
2009/02/23(月) 21:22:43*fruitsは書き換えできないから適当なバッファを用意してコピーしろ
char buffer[256];
strcpy(buffer, fruits[i]);
buffer[0] = toupper(buffer[0]);
0316デフォルトの名無しさん
2009/02/23(月) 21:32:01#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]);
}
慣れないうちは()を付けること
格好つけて()を省略してツウぶるのはやめような
0317デフォルトの名無しさん
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;
}
0318デフォルトの名無しさん
2009/02/23(月) 21:33:470319デフォルトの名無しさん
2009/02/23(月) 21:34:36あと処理系によってはコンパイルとおらないかも
(ポインタ配列の関数呼び出しによる初期化不可)
0320デフォルトの名無しさん
2009/02/23(月) 21:34:55引数を書き換えても反映されない、
アドレスを渡すとか返り値を使え
0321デフォルトの名無しさん
2009/02/23(月) 21:37:26void 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);
0322デフォルトの名無しさん
2009/02/23(月) 21:41:10*struct.fieldでいい気もするんだが。
0323デフォルトの名無しさん
2009/02/23(月) 21:41:28>>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が関数っぽいし。
0324317
2009/02/23(月) 21:45:32いろいろと助言ありがとうございます。
とりあえず>>323さんのが一番単純なので使わせていただきます。
ありがとうございました。
0325デフォルトの名無しさん
2009/02/23(月) 21:54:30( ゚д゚)
0326デフォルトの名無しさん
2009/02/23(月) 21:58:360327デフォルトの名無しさん
2009/02/23(月) 22:03:16返すことが
0328デフォルトの名無しさん
2009/02/23(月) 22:10:56秀丸のtagファイルを全階層のディレクトリ分、関数もヘッダも一通り作るにはどうすれば?
やはり手動?
0329デフォルトの名無しさん
2009/02/23(月) 22:14:25>>323だと速度遅い
今回の例だと気にするほどではないかもしれないが。
0330デフォルトの名無しさん
2009/02/23(月) 22:39:09これはおk
0331デフォルトの名無しさん
2009/02/23(月) 22:39:430332デフォルトの名無しさん
2009/02/23(月) 22:43:29念のため
0333デフォルトの名無しさん
2009/02/23(月) 22:45:20Windows優勢のこの時代においては
という但し書きが必要
0334デフォルトの名無しさん
2009/02/24(火) 00:39:570335デフォルトの名無しさん
2009/02/24(火) 00:43:00char str[256] = "ABC";
〜処理〜
sprintf(str , "%sDEF" , str);
ってやろうとしたんだけど、うまくいかなです。
どうも、%s読む前にstrが初期化されてる
気がするんだけど、そういう事?
str = strcat(str,"DEF"); が無難?
0336デフォルトの名無しさん
2009/02/24(火) 00:57:040337デフォルトの名無しさん
2009/02/24(火) 00:57:470338デフォルトの名無しさん
2009/02/24(火) 01:01:04sprintf()に渡すバッファと書式のポインタは、他のポインタと同一では
いけないと規格で決まっている。
0339デフォルトの名無しさん
2009/02/24(火) 01:04:45++a;
free(a);
って問題ある?
0340デフォルトの名無しさん
2009/02/24(火) 01:08:15求めてた答え、助かります。
strncatの方がいいのか。thx
0341デフォルトの名無しさん
2009/02/24(火) 01:09:44ある。
即時にクラッシュしないかもしれないが、ヒープが壊れたりしてヒドい
ことになる。
0342デフォルトの名無しさん
2009/02/24(火) 01:11:36特定の実装でどうなるかという話ではなくて、
Cの規格でダメだと決まっているの?
0343デフォルトの名無しさん
2009/02/24(火) 01:13:340344デフォルトの名無しさん
2009/02/24(火) 01:14:01ISO/IEC 9899 で決まってます。
0345デフォルトの名無しさん
2009/02/24(火) 01:16:410346デフォルトの名無しさん
2009/02/24(火) 01:19:12なければ作れ。
0347デフォルトの名無しさん
2009/02/24(火) 01:19:580348デフォルトの名無しさん
2009/02/24(火) 01:25:11そうその通り
free関数は例え引数ポインタがmallocで確保されたメモリブロックを
指していてもそのメモリブロックを解放するような(親切な)
実装をしてはならないことに決まっている...ようだ
0349348
2009/02/24(火) 01:26:34>指していてもそのメモリブロックを解放するような(親切な)
>実装をしてはならない
free関数は例え引数ポインタがmallocで確保されたメモリブロックを
指していてもそのブロックの先頭を指していない限り
そのメモリブロックを解放するような(親切な)実装をしてはならない
に訂正
0350デフォルトの名無しさん
2009/02/24(火) 01:34:05単に未定義なんじゃなくて?
0351デフォルトの名無しさん
2009/02/24(火) 01:36:451万円借りたら1万円返す。9千円で済まそうとしてはいけない。
0352デフォルトの名無しさん
2009/02/24(火) 01:44:200353335
2009/02/24(火) 01:46:06strlcatの使い勝手は分かった。確かにその都度自作関数でも十分価値あるのは理解。
>>347
stringクラスは、C/C++の文字列扱いの不便さ解消してて、すごいとは思ってたんだが
今は、string使うのが当たり前なのか?
細かい作業とか、他人のソースとか結局char配列で文字列を宣言すること多いなら
しばらく、手を出さずにいようかと思ってたんだけど・・・・
0354デフォルトの名無しさん
2009/02/24(火) 01:46:44場合、例え同一の金額、それ以上の金額であっても受け取ってはならない
と定めているのと似てるなw
0355デフォルトの名無しさん
2009/02/24(火) 01:48:22にてないからw
0356デフォルトの名無しさん
2009/02/24(火) 02:01:16利子だけが雪だるま式に・・・・
新たな貸金商法ですね?
0357デフォルトの名無しさん
2009/02/24(火) 02:07:43移植性を考えたらstrLcatとかちょっと名前変えておいた方がいいよ。
0358デフォルトの名無しさん
2009/02/24(火) 02:08:190359デフォルトの名無しさん
2009/02/24(火) 02:08:26当たり前っちゃ当たり前だけどchar *で間に合うならそれで済ませたほうが簡単
つーかここはCスレだし
0360デフォルトの名無しさん
2009/02/24(火) 02:11:01いやだけど、どういう状況?
0361デフォルトの名無しさん
2009/02/24(火) 02:14:540362デフォルトの名無しさん
2009/02/24(火) 02:23:350363デフォルトの名無しさん
2009/02/24(火) 02:26:18テストとかすぐ終わるプログラムにしか使えないじゃないか。
長時間滞在するデーモンプログラムとかメモリリーク起してえらいことになる。
0364デフォルトの名無しさん
2009/02/24(火) 02:28:580365デフォルトの名無しさん
2009/02/24(火) 02:29:47それ、元の分以上には何も返ってこないんですけど(番号の違うものは受け取れないから)、そんな商売に何のうまみが。。。
って、何の話してんの?
0366デフォルトの名無しさん
2009/02/24(火) 02:32:27円でキャストしないと。
0367デフォルトの名無しさん
2009/02/24(火) 02:33:07ageてわびます。
0368デフォルトの名無しさん
2009/02/24(火) 02:34:19金の勘定ができない奴に使える詐欺かもね。
0369デフォルトの名無しさん
2009/02/24(火) 02:34:430370デフォルトの名無しさん
2009/02/24(火) 02:43:16疲れてきたらかなり適当になる
ということで、>>367
//円をドルに換算する
doru en_to_doru(en e,doru d){
}
誰か中身おね
0371デフォルトの名無しさん
2009/02/24(火) 02:49:510372デフォルトの名無しさん
2009/02/24(火) 02:50:59{
return Google(e,"を",d,"へ");
}
0373デフォルトの名無しさん
2009/02/24(火) 02:54:060374デフォルトの名無しさん
2009/02/24(火) 02:55:07return en*rate;
}
0375デフォルトの名無しさん
2009/02/24(火) 02:57:220376デフォルトの名無しさん
2009/02/24(火) 03:07:070377デフォルトの名無しさん
2009/02/24(火) 03:26:22ただ・・・・・・・・・
0378デフォルトの名無しさん
2009/02/24(火) 03:30:11未定義の一言で済ませればいいのにわざわざ規格として禁止してる意味はなにかってことだろ
0379デフォルトの名無しさん
2009/02/24(火) 03:30:47>>351-367
0380デフォルトの名無しさん
2009/02/24(火) 10:01:140381デフォルトの名無しさん
2009/02/24(火) 12:47:230382デフォルトの名無しさん
2009/02/24(火) 13:20:48http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3010
0383デフォルトの名無しさん
2009/02/24(火) 13:39:500384デフォルトの名無しさん
2009/02/24(火) 14:22:11やっぱり未定義としか書いてないな
つーわけで>>348-349は大嘘
0385デフォルトの名無しさん
2009/02/24(火) 14:36:05>>345
>>348-349
はそれを皮肉っただけだろw
0386デフォルトの名無しさん
2009/02/24(火) 14:39:060387デフォルトの名無しさん
2009/02/24(火) 14:43:47JISの定義は>>349辺りとさほど変わりが無い件について
まぁ free( (void*) ( (char*)malloc(1024)+1) );
がヒープ壊すのをfreeの問題かプログラマの管理の問題かは
議論が分かれるとこだろけどな
0388デフォルトの名無しさん
2009/02/24(火) 14:46:08要求しないのと禁止するのはぜんぜん違うだろ・・・
0389デフォルトの名無しさん
2009/02/24(火) 14:46:09その free は何をしても「問題ない」
未定義の意味わかってるか?
0390デフォルトの名無しさん
2009/02/24(火) 14:59:53処理系によっては、>>387のfreeは正常に動作し
処理系によってはヒープを壊すなどの障害が発生
だから未定偽
すべての処理系に共通の動作保障が得られている
ものを「定義」すると表現しているようだw
0391デフォルトの名無しさん
2009/02/24(火) 15:09:42ANSI規格には多くの論点が未定義のまま放置してあることを考えるとぞっとする。
規格の仕事はこれらの問題を標準化することではなかったのか。
A:
C言語は昔からその一部はコンパイラやハードウェアがどう実装されて
どう振る舞ってもいいようになっている。こういうふうにわざとはっきりさせないことで、
コンパイラはありそうもないような状況にまで適切に定義された動作を保証することのために
すべてのプログラムに余計なコードの重荷を背負わせることなく、
よくある状況で効率のいいコードを生成することができる。
よって規格はそれまでに存在した習慣を単に明文化したにすぎない。
プログラミング言語の規格は言語の使用者とコンパイラの実装者の間の条約と考えればいい。
その条約の一部はコンパイラ実装者が提供を約束した機能で、使い手は用意されているものだと思いこんでいい。
しかしながら、別の部分はユーザーが従うと約束した決まりで、実装者は守ってもらえると思いこんでいい。
両方が自分の約束を守るかぎり、プログラムは頑張れば動く可能性がある。
どちらかでも公約を破れば、どんな部分についても確実に動くとは保証できない。
0392デフォルトの名無しさん
2009/02/24(火) 15:14:57JISのお墨付きが貰えないというだけでANSIのお墨付きがもらえれば別にいいです
0393デフォルトの名無しさん
2009/02/24(火) 15:17:42一体何について語っているんだ?
0394デフォルトの名無しさん
2009/02/24(火) 15:28:00勝手に仕様を定義して固定化してしまうことの負の影響について考えてみよう
0395デフォルトの名無しさん
2009/02/24(火) 15:30:13こっちでやれ
【初心者お断り】ガチ規格準拠C専用スレ Part133
http://pc11.2ch.net/test/read.cgi/tech/1201153965/
0396デフォルトの名無しさん
2009/02/24(火) 15:45:28それを勝手に公有物のように扱い動作仕様にまで干渉する人たちって一体...
0397デフォルトの名無しさん
2009/02/24(火) 16:07:49そんなこと誰も禁止していない
0398デフォルトの名無しさん
2009/02/24(火) 16:11:15気に入らない仕様(規格)を独断的に性急に規格にしてしまったから問題なんだろ?
0399デフォルトの名無しさん
2009/02/24(火) 16:18:20ベンダーが明文化する程度に留めて置くべきだったものを、皆でよってたかってどんどん明文化し
挙句の果てには無責任に自分が作ったかのように文法書や教科書まで作って布教してしまう
奴らに怒ってるだけだろ
0400デフォルトの名無しさん
2009/02/24(火) 16:43:22ここはそういうスレじゃないんで
0401デフォルトの名無しさん
2009/02/24(火) 17:08:00共通部分は無かったとする。(男も女も居た)
たまたまある瞬間、*非同期に*(相互連絡はもちろん面識すら無い状態で)
共通のちょっと珍しい行動を行った
(例えばあくびをする時に、腕を後ろに反らした)
その同姓同名の人達の共通仕様はあくびの時の動作であると定義されて
しまった。以降同姓同名の人は、みな、例えばあくびの時に腕を後ろに
反らさなければならないと規定されてしまった。
こういうのと似てるんだよね。
0402デフォルトの名無しさん
2009/02/24(火) 17:49:330403デフォルトの名無しさん
2009/02/24(火) 17:52:39規格化の経緯を妄想するのは勝手だけどね
0404デフォルトの名無しさん
2009/02/24(火) 18:35:15void型変数を含む構造体があったとします。
その構造体のメモリを動的に確保した上で
構造体内のvoid変数を違う型にキャストした場合
メモリはちゃんと確保されるのでしょうか。
0405デフォルトの名無しさん
2009/02/24(火) 18:36:33「void型変数」は存在できないはずです
0406デフォルトの名無しさん
2009/02/24(火) 18:36:410407デフォルトの名無しさん
2009/02/24(火) 18:41:260408デフォルトの名無しさん
2009/02/24(火) 18:43:050409デフォルトの名無しさん
2009/02/24(火) 18:44:530410デフォルトの名無しさん
2009/02/24(火) 18:47:060411デフォルトの名無しさん
2009/02/24(火) 18:48:09つまりスレ違いだ
0412デフォルトの名無しさん
2009/02/24(火) 18:48:34自動で領域確保されると勘違いしている可能性が高い
0413デフォルトの名無しさん
2009/02/24(火) 18:53:24キャストと言い、またその行為をキャストすると表現するのなら
問題は全く無いな。
0414デフォルトの名無しさん
2009/02/24(火) 18:58:16日本語でおK
0415デフォルトの名無しさん
2009/02/24(火) 19:04:00キャストする:ある型のサイズをmallocに渡してvoid*を得ること
void型変数を含む構造体があったとします。
その構造体のメモリを動的に確保した上で
構造体内のvoid変数を違う型にキャストした場合
メモリはちゃんと確保されるのでしょうか。
↓
void型変数を含む構造体があったとします。
その構造体のメモリを動的に確保した上で
構造体内のvoid変数を違う型にある型のサイズをmallocに渡してvoid*を得た場合
メモリはちゃんと確保されるのでしょうか。
???
>>413
日本語でおK
0416デフォルトの名無しさん
2009/02/24(火) 19:15:43その言葉の意味するところが分からんな
ちょいと英語で言ってくれんか
0417デフォルトの名無しさん
2009/02/24(火) 19:21:12int i=234;
double d=(double)i;
こういうのをキャストと言って、決してコンバージョンとは言わないのだよ。
0418デフォルトの名無しさん
2009/02/24(火) 19:21:45なにを言ってるんだ?
0419デフォルトの名無しさん
2009/02/24(火) 19:22:56正しくはvoidではなくvoid*でした。
0420デフォルトの名無しさん
2009/02/24(火) 19:32:22Cのキャストは万能
例えば次の式もどのような処理系でも
正しく評価され{}は実行される筈
if( (int)3==(int)(long)(double)(long)(float)3){
hoge();
}
0421デフォルトの名無しさん
2009/02/24(火) 19:33:26どのみち、メモリが確保されるかどうかとは関係なくね?
0422デフォルトの名無しさん
2009/02/24(火) 19:35:180423デフォルトの名無しさん
2009/02/24(火) 19:36:02するだろ、しないとだめなケースもあるだろ
0424デフォルトの名無しさん
2009/02/24(火) 19:37:23C言語ではポインタとして使う限りキャストは必要ない
0425デフォルトの名無しさん
2009/02/24(火) 19:41:20つ可変引数
0426デフォルトの名無しさん
2009/02/24(火) 19:44:480427デフォルトの名無しさん
2009/02/24(火) 19:52:13void*を含む構造体をその構造体としてキャストし、
更にその中のvoid*項目を任意の型にキャストしてから
使ってください。
構造体キャスト直後はvoid*項目は恐らくアクセス不能な
ポインタ値が入ってるので、キャストしてから使って
下さい。
0428デフォルトの名無しさん
2009/02/24(火) 19:52:54日本語でおk
0429デフォルトの名無しさん
2009/02/24(火) 19:56:25キャストの意味を完全に取り違えてる。
0430デフォルトの名無しさん
2009/02/24(火) 19:57:45キャストについて説明よろ
0431デフォルトの名無しさん
2009/02/24(火) 20:00:36出来るよ。
0432デフォルトの名無しさん
2009/02/24(火) 20:12:23キャストの定義まだぁ?
0433デフォルトの名無しさん
2009/02/24(火) 20:23:20ググレカス
0434デフォルトの名無しさん
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は保持されるのかという話なんです。
分かりにくくてごめんなさい。
0435デフォルトの名無しさん
2009/02/24(火) 20:27:11わかる愚問
喜んで
回答者
わからぬ問題
ググレカス
0436デフォルトの名無しさん
2009/02/24(火) 20:30:41メザシのスコープが残ってる間は大丈夫。
0437デフォルトの名無しさん
2009/02/24(火) 20:33:05wchar_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に変えてやると成功する。
0438デフォルトの名無しさん
2009/02/24(火) 20:35:45おお
そうですか
素早い回答有難うございました。
0439デフォルトの名無しさん
2009/02/24(火) 20:40:24そのアドレス値をポインタ値に変換されて他のポインタ変数に
入れたら値が消滅してしまうとすると、恐ろしくて誰もC等
使わないと思います。
0440437
2009/02/24(火) 20:43:19"d:\\kuro01.wmv" ではなく、 "\\\\?\\d:\\kuro01.wmv"の間違いでした。
失敗するのは俺だけ?
誰か検証してみてください。
0441デフォルトの名無しさん
2009/02/24(火) 20:51:33部分を持っている状況では安易にバグとは言ってはいけない
てか完全にAPIスレの話題
0442デフォルトの名無しさん
2009/02/24(火) 21:07:04前者はドライブ名で後者はファイルと拡張子とまったく条件が違うが
0443デフォルトの名無しさん
2009/02/24(火) 21:09:45FullPathがドライブ名で始まってないのだから空文字が返されて正常終了で当たり前と思う
0444デフォルトの名無しさん
2009/02/24(火) 21:10:50そもそも_wsplitpath_sでそんな形式サポートしてないだろ
引数も間違ってるしちゃんとMSDN読めよ
0445デフォルトの名無しさん
2009/02/24(火) 21:15:53てか \\?\ ってなんだ
0446デフォルトの名無しさん
2009/02/24(火) 21:20:200447デフォルトの名無しさん
2009/02/24(火) 21:30:220448デフォルトの名無しさん
2009/02/24(火) 21:32:23おk
0449デフォルトの名無しさん
2009/02/24(火) 21:32:58んなスレない
0450デフォルトの名無しさん
2009/02/24(火) 21:34:25お前の目は節穴か
0451デフォルトの名無しさん
2009/02/24(火) 21:55:00「俺に聞け」スレだな
0452デフォルトの名無しさん
2009/02/24(火) 22:31:12向こう行けグズ
http://pc11.2ch.net/test/read.cgi/tech/1233622578/
0453デフォルトの名無しさん
2009/02/24(火) 23:17:08(int *)のキャストはいらない
標準の処理系じゃコンパイル通らないし
0454デフォルトの名無しさん
2009/02/24(火) 23:20:21○規格に厳格な処理系
0455デフォルトの名無しさん
2009/02/25(水) 01:13:520456デフォルトの名無しさん
2009/02/25(水) 01:24:22左辺値になることは今のところは許されるが
将来はエラーになる可能性がある
と警告を出すのがgcc
だが逆の予想もあるかもなw
「キャストならぬ実際には元の型を非可逆的に変換してしまう
型変換演算子を介して他の型の値を読み込むことはエラーにな
る可能性がある。」
0457デフォルトの名無しさん
2009/02/25(水) 01:28:320458デフォルトの名無しさん
2009/02/25(水) 03:08:25もちろんコンストラクタとかはありませんが、その指定した分のメモリを
ヒープに割り当てて、ポインタで使えるようにするというのは、
あたらしくオブジェクトを作ることに似ていると思ったのですが...
0459デフォルトの名無しさん
2009/02/25(水) 03:15:240460デフォルトの名無しさん
2009/02/25(水) 03:34:56ありがとうございました。
0461デフォルトの名無しさん
2009/02/25(水) 13:51:11gccとかだと左辺値に読み替えてコンパイルするんだよな
>>456
ないないそれはない
0462デフォルトの名無しさん
2009/02/25(水) 16:20:32gcc4.3.3では、
error: lvalue required as left operand of assignment
になった。古いのは知らん。
0463デフォルトの名無しさん
2009/02/25(水) 16:59:260464デフォルトの名無しさん
2009/02/25(水) 18:34:560465デフォルトの名無しさん
2009/02/25(水) 18:52:13マニュアル読め
0466476
2009/02/25(水) 20:15:23ロックマンなど作れるでしょうか?
ロックマンの活動源はプログラムのコードで、ロックバスーターなどC言語で書いたりして強くすると
ウイルスを駆除しやすくなるなど、C言語で書いて新しいロックバスターなどをつけたり
ゴミデータでロックマンの体力をあげたり
そういうのって実際つくれるんですか?
0467デフォルトの名無しさん
2009/02/25(水) 20:19:020468デフォルトの名無しさん
2009/02/25(水) 20:48:35C言語では不可能です
あきらめましょう
0469デフォルトの名無しさん
2009/02/25(水) 21:29:10日本語でおk
0470デフォルトの名無しさん
2009/02/25(水) 21:31:450471476
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を繰り上げてしまうのです
どうすればいいんですか?教えてください
0472476
2009/02/25(水) 21:48:15printf("%c",(*p++)+9);
でできました
0473デフォルトの名無しさん
2009/02/25(水) 21:48:55(*p++)+9
0474デフォルトの名無しさん
2009/02/25(水) 21:49:390475デフォルトの名無しさん
2009/02/25(水) 21:50:18>>474
0476デフォルトの名無しさん
2009/02/25(水) 22:44:570477デフォルトの名無しさん
2009/02/25(水) 23:51:070478デフォルトの名無しさん
2009/02/25(水) 23:56:53と
if(!n){〜}
は完全に等価だと思っていいですか?
0479デフォルトの名無しさん
2009/02/25(水) 23:58:26nがマクロだと異なる場合がある。
0480デフォルトの名無しさん
2009/02/26(木) 00:01:44nはマクロでなく通常の変数を想定しています。
が、もしマクロで異なる場合があるとしたらそれはどんなマクロですか?
0481デフォルトの名無しさん
2009/02/26(木) 00:05:550482デフォルトの名無しさん
2009/02/26(木) 00:08:00それは想像してませんでした。
ありがとうございます。
0483デフォルトの名無しさん
2009/02/26(木) 00:10:040484デフォルトの名無しさん
2009/02/26(木) 00:13:03言語スレで「完全に等価」か、と聞かれたら
否定せざるをえないでしょ
0485デフォルトの名無しさん
2009/02/26(木) 00:15:22static char *ptr = "abcdefg";
のstatic宣言で確保される静的領域はポインタ領域(4バイト)
だけなので、"abcdefg"はレアケースでぶっとびますよね??
0486デフォルトの名無しさん
2009/02/26(木) 00:16:060487デフォルトの名無しさん
2009/02/26(木) 00:19:290488デフォルトの名無しさん
2009/02/26(木) 00:22:520489デフォルトの名無しさん
2009/02/26(木) 00:24:11"abcdefg"の領域としてsizeof("abcdefg")バイト
確保される。
0490デフォルトの名無しさん
2009/02/26(木) 00:27:26ポインタと文字列がまだごっちゃになっているっぽくない?
この世(C言語)に文字列など存在しないのだよ。
0491デフォルトの名無しさん
2009/02/26(木) 00:27:490492デフォルトの名無しさん
2009/02/26(木) 00:31:27いや、普通に存在するし。
0493デフォルトの名無しさん
2009/02/26(木) 00:34:40"アホ"
0494485
2009/02/26(木) 00:39:08組込屋なので>>485 の発想をしてしまいました。
レアケース例=プログラム実行中にメモリが枯渇して
他プロセスがメモリ消費するケースとか。
>>488
>>489
ベストアンサーsです。どうもありがとう。
0495デフォルトの名無しさん
2009/02/26(木) 00:41:32ここに住人は>>485のようなレスを待ちわびているのです
0496デフォルトの名無しさん
2009/02/26(木) 00:41:36他プロセスがメモリ消費するケースとか。
ないない
0497デフォルトの名無しさん
2009/02/26(木) 00:42:20書き換え可能である保証がないだけだろ
0498デフォルトの名無しさん
2009/02/26(木) 00:44:09環境によっては書き換えを無理やりやろうとするかもしれないが、深刻なエラーを引き起こす。jkだろ
0499デフォルトの名無しさん
2009/02/26(木) 00:46:27無理やり変更できる環境は見たことない。
0500デフォルトの名無しさん
2009/02/26(木) 00:48:510501デフォルトの名無しさん
2009/02/26(木) 00:50:48EPROMはROMなので通常定数が消される心配はない。
ただし、EPROMの要領は限られているのでPCのブート時(リセット)に紫外線を照射して内容を消去している。
長時間PCを利用していると不安定なるのはEPROMの容量が枯渇するためだ。
リセットが短すぎるとEPROMの内容が消去されない可能性があるのでリセットは十分長押しすること。(5秒以上が望ましいとされている)
0502デフォルトの名無しさん
2009/02/26(木) 00:51:060503デフォルトの名無しさん
2009/02/26(木) 00:51:41仮想メモリ
0504デフォルトの名無しさん
2009/02/26(木) 00:53:27それはない
0505デフォルトの名無しさん
2009/02/26(木) 00:53:51今はどうだろうね。どっちにしろ環境依存だし、自分が作ってる環境がどうなのかは
組込屋なら当然知ってるはず
0506デフォルトの名無しさん
2009/02/26(木) 00:53:57DEP
0507デフォルトの名無しさん
2009/02/26(木) 00:54:39VC 2008 の場合、文字列定数は CONST セグメントに置かれて、
書き換えようとするとセグメンテーションエラーになる
0508デフォルトの名無しさん
2009/02/26(木) 00:56:02組み込み系などではどこでも書き込めてしまうのがある
0509デフォルトの名無しさん
2009/02/26(木) 00:56:22たいていそうだけど
0510デフォルトの名無しさん
2009/02/26(木) 00:56:53リセットに時間かかりすぎだろw
0511デフォルトの名無しさん
2009/02/26(木) 00:57:28日本語でおk
0512デフォルトの名無しさん
2009/02/26(木) 00:57:430513デフォルトの名無しさん
2009/02/26(木) 01:07:06いや、リテラル用にとった領域を他のプロセスが上書きするって環境らしいよ。
OSが入っているのかどうかも・・・
0514デフォルトの名無しさん
2009/02/26(木) 01:07:52「文字列定数は書き換え不可の領域に配置される可能性がある」
0515485
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);
}
0516デフォルトの名無しさん
2009/02/26(木) 01:11:21書き換え不可の領域にどうやって格納するの?
0517デフォルトの名無しさん
2009/02/26(木) 01:11:320518デフォルトの名無しさん
2009/02/26(木) 01:13:02マジですか?
0519デフォルトの名無しさん
2009/02/26(木) 01:13:31方法は処理系によって異なる
0520デフォルトの名無しさん
2009/02/26(木) 01:15:25昔のMSのコンパイラは書き換え可能領域に配置されていたよ
0521デフォルトの名無しさん
2009/02/26(木) 01:15:26どの処理系でもいいから一例をあげてよ
本当にできるなら
0522デフォルトの名無しさん
2009/02/26(木) 01:17:17正気とは思えない
0523デフォルトの名無しさん
2009/02/26(木) 01:17:19一例も何も、実際やってみれば書き換えしようとしたらエラーになるからそれじゃダメなの?
0524デフォルトの名無しさん
2009/02/26(木) 01:17:520525デフォルトの名無しさん
2009/02/26(木) 01:18:490526デフォルトの名無しさん
2009/02/26(木) 01:19:490527デフォルトの名無しさん
2009/02/26(木) 01:21:32だから、その書き換えしようとしたらエラーになるようなところに、どうやって定数を格納するんだよ
0528デフォルトの名無しさん
2009/02/26(木) 01:21:38そんなことは知らない
規格が定めているのは書き換え可能である保証がないことだけであって
各処理系が実際にどう扱ってるかなどは関知するところではない
0529デフォルトの名無しさん
2009/02/26(木) 01:23:09「おれは腕が無いのでOSのソースコードを読んで該当するところを説明してくれよ」
って言ってるのとほぼ同じだぜ。
本当に知りたいならlinuxのソース持ってきて読めばいいのに。
0530デフォルトの名無しさん
2009/02/26(木) 01:23:53あるなら、あると言ってる側が示せよ。
無いものは示せない。
0531デフォルトの名無しさん
2009/02/26(木) 01:24:34大抵は、初期化の時にOSが手配してくれるんだよ。
どうやってって質問は意味がわからない。
0532デフォルトの名無しさん
2009/02/26(木) 01:26:07一例を示すにしてもちゃんとやるならOSソースが必要。
それを説明してくれというならもうこの世界では誰も真面目に相手にしてくれない。
0533デフォルトの名無しさん
2009/02/26(木) 01:26:11OSは書き換えられるんだろ?それなら書き換え不可の領域じゃないだろ。
あくまでもアプリからの書き換えが制限されている可能性があるというだけで。
0534デフォルトの名無しさん
2009/02/26(木) 01:26:590535デフォルトの名無しさん
2009/02/26(木) 01:27:28定数を格納するのはアプリケーションでなくてローダー。
アプリケーションは書き込めないがローダーなどのシステムプログラムは書き込める。
そういうことだろう。
0536デフォルトの名無しさん
2009/02/26(木) 01:27:290537デフォルトの名無しさん
2009/02/26(木) 01:27:510538デフォルトの名無しさん
2009/02/26(木) 01:28:25テストコードでリテラルを書き換えようとしているヤツがいたっけ。
0539デフォルトの名無しさん
2009/02/26(木) 01:28:39くだらん議論でレスが進みすぎる
0540デフォルトの名無しさん
2009/02/26(木) 01:30:06おまえは何を言っているんだ?
0541デフォルトの名無しさん
2009/02/26(木) 01:31:50ソフトウェア都下のレベルを超えてるwww
0542デフォルトの名無しさん
2009/02/26(木) 01:33:15まて、お前の米粒はそんなに固くなっているのか
0543デフォルトの名無しさん
2009/02/26(木) 01:34:110544デフォルトの名無しさん
2009/02/26(木) 01:41:22意味がわからん。一般的なOSでは、静的データは実行ファイルの中に含まれていて、プロセスが動作を開始する前にOSによってメモリ空間に展開される。
プロセス自身が自前で格納処理を行うわけじゃない。
0545デフォルトの名無しさん
2009/02/26(木) 01:52:39あー、「書き換え不可」って言った場合、普通の人なら「その領域にアクセスしようとするプロセスから見て」という前提で考えるのに、>>527は「どこから見ても書き換え不可」って解釈したのか。
……本気で馬鹿なんじゃないだろうか。
0546デフォルトの名無しさん
2009/02/26(木) 01:58:230547デフォルトの名無しさん
2009/02/26(木) 02:04:08>無いものは示せない。
悪魔の証明かよw
実際にあるけどそれを証明するのはお前の仕事。
いちいちかまってあげるほどPGは甘くない。
0548デフォルトの名無しさん
2009/02/26(木) 02:09:24とにかくみんな書き込むのやめろ
0549デフォルトの名無しさん
2009/02/26(木) 02:13:54マクロで関数を定義して使うのと、普通に関数定義して使うのだと、
それぞれメリットってなんでしょうか?
マクロ関数は使いすぎると見ずらくて困るのですが。
0550デフォルトの名無しさん
2009/02/26(木) 02:15:28○見づらくて
0551デフォルトの名無しさん
2009/02/26(木) 02:16:000552デフォルトの名無しさん
2009/02/26(木) 02:16:270554デフォルトの名無しさん
2009/02/26(木) 02:22:40マクロの利点:
・おそらく関数より処理が早い場合が多いだろうという期待ができる
・関数ではできない処理、たとえば
型に縛られない引数や型自体を引数に取ること
プリプロセッサによる特殊な動作
などができる
それ以外では関数のほうが大体有利
>>553
わからない
マクロは関数呼び出しのコストがないがそのぶんメモリイメージが増大して
結果的に遅くなることがないとはいえない
性能は実測で確かめること
0556デフォルトの名無しさん
2009/02/26(木) 02:27:33ボトルネックになりそうだと言っても、マクロを使うのは避けた方が良い
そういうところはinline関数で行うべき
0557デフォルトの名無しさん
2009/02/26(木) 05:59:140558デフォルトの名無しさん
2009/02/26(木) 06:19:060559デフォルトの名無しさん
2009/02/26(木) 07:51:42char *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ループを使って連番で初期化できたら楽そうだな思って
とりあえず上記までは書きましたが、ここから先は如何すればいいでしょうか?
0560デフォルトの名無しさん
2009/02/26(木) 08:03:27struct 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;
}
0561デフォルトの名無しさん
2009/02/26(木) 08:11:39即答、ありがとうございます
配列を使うんですね。再度、勉強し直して来ます
0562デフォルトの名無しさん
2009/02/26(木) 10:41:18する文脈では、NULLや静的な変数以外へのポインタ
などをアクセス不能(読み取り、書き込み不能)なものと
想定して議論をすることが多いが、これは経験値に基づく
もので、これ以外にアクセス不能なものが無いことやそれ
らのポインタ値が本当にアクセス不能なのかについては環
境依存な話となる。
0563デフォルトの名無しさん
2009/02/26(木) 11:38:100564デフォルトの名無しさん
2009/02/26(木) 13:42:13正確には環境依存ではなく、状況依存だよ
0565デフォルトの名無しさん
2009/02/26(木) 14:13:05使うかどうかは別にして。
前にみたロベールのC++教室では
#ifdef _DEBUG
#define ONLYDEBUG
#else
#define ONLYDEBUG /##/
#endif。
とか。
いいね、プリプロセッサ。
0566デフォルトの名無しさん
2009/02/26(木) 14:40:59そーゆーCのソースに見えないマクロはおじさん嫌いだな!
もちろんおじさんの個人的趣味だけどな!
0567デフォルトの名無しさん
2009/02/26(木) 14:52:07プラットフォーム依存、環境、そして状況依存な
メモリアクセス可能性については基本的に関知しない。
添付ライブラリマニュアルでは、アクセス可能性につ
いて言及しているものがあるが、そのライブラリを
使用したことによってアクセス違反が発生したことに
ついて、一律すべてにおいてユーザーが契約違反な
メモリアドレスをライブラリに与えたと判定する
ことは原理的に出来ない。
0568デフォルトの名無しさん
2009/02/26(木) 15:23:140569デフォルトの名無しさん
2009/02/26(木) 15:24:32#ifdef _DEBUG
#endif
のほうがずっとはっきりしていいと思うけどなぁ
0570デフォルトの名無しさん
2009/02/26(木) 15:25:18いいからもうあっちいけよ
0571デフォルトの名無しさん
2009/02/26(木) 15:26:210572デフォルトの名無しさん
2009/02/26(木) 15:36:35いやそれ全然違うだろ
0573デフォルトの名無しさん
2009/02/26(木) 15:46:03(実利用頻度にもよるが)素直に #ifdef で挟む記述をしたほうが見やすいのでは?というところ
0574デフォルトの名無しさん
2009/02/26(木) 15:49:020575デフォルトの名無しさん
2009/02/26(木) 15:50:460576デフォルトの名無しさん
2009/02/26(木) 15:53:44いやあのぐらいなら乱用じゃ無いでしょ。
末期なソースはもっとひどい。
0577デフォルトの名無しさん
2009/02/26(木) 15:57:37バリエーションが発生するソースを誰が管理できるでしょうか?
0579デフォルトの名無しさん
2009/02/26(木) 16:07:03管理とは?
そのままの形では修正が極度に難しくなることは事実だが
直接コンパイルしたものを利用するからで、ソースの
ひな形として保管しておけばいいのでは?
cppとか使って平文wに直し、それを修正するなり
整形するなり加筆するなりして利用すればいいだけ。
0580デフォルトの名無しさん
2009/02/26(木) 16:21:260581デフォルトの名無しさん
2009/02/26(木) 16:37:43その程度も扱えない奴は無能
0582デフォルトの名無しさん
2009/02/26(木) 16:41:31はいはい
0583デフォルトの名無しさん
2009/02/26(木) 19:47:070584デフォルトの名無しさん
2009/02/26(木) 19:59:23signed unsigned
0585デフォルトの名無しさん
2009/02/26(木) 20:08:38標準符号付き整数型/標準符号無し整数型
0586デフォルトの名無しさん
2009/02/26(木) 20:30:13汎整数型とかいう言い回しなかったっけ?
0587デフォルトの名無しさん
2009/02/26(木) 20:47:24bool型、char型、wchar_t型、符号付き整数型及び符号なし整数型をまとめて、汎整数型と呼ぶ。
汎整数型は、その同義語として整数型とも呼ぶ。
0588583
2009/02/26(木) 20:48:110589デフォルトの名無しさん
2009/02/26(木) 21:02:2650万行のソースコード1万通りだと。合計50億行です
0590デフォルトの名無しさん
2009/02/26(木) 21:03:56それが本当に50億行にしか見えないならもうプログラミングなんてやめろ
0591デフォルトの名無しさん
2009/02/26(木) 21:04:020592デフォルトの名無しさん
2009/02/26(木) 21:06:390593デフォルトの名無しさん
2009/02/26(木) 21:10:42何故わざわざC言語でオブジェクト指向?
それはともかく、以前オブジェクト指向言語であるRubyの処理系は
Cで書かれているとか聞いた気がする
最近は知らないけど
0594591
2009/02/26(木) 21:14:10実際そういう組み方で作られているものって何かあるかなと思って。
0595デフォルトの名無しさん
2009/02/26(木) 21:14:570596デフォルトの名無しさん
2009/02/26(木) 21:50:59俺は使ったことがないが、GLib
ttp://www.gnome.gr.jp/docs/glib/
とか、Core Foundation
ttp://journal.mycom.co.jp/column/objc/034/index.html
とかさわってみれば?
0598デフォルトの名無しさん
2009/02/26(木) 22:15:01参照カウントをライブラリとして作っておくとか。
0599デフォルトの名無しさん
2009/02/26(木) 22:16:320600デフォルトの名無しさん
2009/02/26(木) 22:17:230601デフォルトの名無しさん
2009/02/26(木) 22:22:540602デフォルトの名無しさん
2009/02/26(木) 22:41:180603デフォルトの名無しさん
2009/02/26(木) 22:55:44マクロで処理すべき処理とマクロで処理すべきでない処理の一例を教えて。
0604デフォルトの名無しさん
2009/02/26(木) 22:56:030605476
2009/02/26(木) 22:58:23#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などで数をかぞえて取り除こうかと思ったんですが
教えてください
0606デフォルトの名無しさん
2009/02/26(木) 22:59:200607デフォルトの名無しさん
2009/02/26(木) 23:05:06{
if (*p == '\0') return;
while (*(p+1)) {
printf("%d-",*p++);
}
printf("%d",*p);
}
0608デフォルトの名無しさん
2009/02/26(木) 23:08:02上ででてるBoehm GCも含めて、C言語での
"安心して使える"GCライブラリはないような気がする
0609476
2009/02/26(木) 23:08:45そんな方法おもいつきませんでした
いらついてさいしょに-表示して-xx-xx-xx-xx-にしようとしました
本当ありがとうございます
0610デフォルトの名無しさん
2009/02/26(木) 23:14:53>マクロで処理すべき処理
出会ったことが無い。
>マクロで処理すべきでない処理
よくある例は
#define POW(x) ((x) * (x))
0611デフォルトの名無しさん
2009/02/26(木) 23:16:47そっか。
ちなみにメモリコンパクションのライブラリってあるのん?
0612デフォルトの名無しさん
2009/02/26(木) 23:17:48定数定義はCならマクロしか選択肢無いし、
だからといって即値を使うのは悪だし、
マクロで処理すべきだろう
0613デフォルトの名無しさん
2009/02/26(木) 23:19:15#define ONLY_DEBUG if(1)
#else
#define ONLY_DEBUG if(0)
#endif
という手もある。
else でリリースオンリーのコードも書ける。
ただし、片方では定義が消えてしまうものを含める事はできない欠点が。
0614デフォルトの名無しさん
2009/02/26(木) 23:20:2564bitの変数を上位32と下位32にわけたり
論理->物理アドレスもマクロだな。俺が作った訳じゃないけど…
0615デフォルトの名無しさん
2009/02/26(木) 23:20:41マクロでないと実現できないこともある
__FILE__ とか __LINE__ とか
0616デフォルトの名無しさん
2009/02/26(木) 23:21:06プラットフォームやターゲットなど、環境の違いを吸収するのにはマクロで
処理することが多い気がする(関数名の差し替えとか)
例外はあるけど、それ以外ではできるだけ避けた方がいいと思う
0617デフォルトの名無しさん
2009/02/26(木) 23:21:50enumで定数定義するというのもあるぜ。
少なくともマクロよりは健全。スコープの外側にまで影響しないしな
enum {HOGE = 100};
0618デフォルトの名無しさん
2009/02/26(木) 23:35:14内容自体は単純でしかもよく使うAPIの呼び出しとかだな
具体的にはWindowsのMessageBox()をラップしたり
あとはもちろん型を引数に取ったり、同名のメンバを持つ違う構造体を引数に取ったり、
識別子を合成したり文字列に変換したりするような処理はマクロでなきゃできない
0619デフォルトの名無しさん
2009/02/26(木) 23:36:28なんか汚いソースになるか、可読性の高いソースになるか、危なっかしいな。
…俺もやるけどw
0620デフォルトの名無しさん
2009/02/26(木) 23:52:42速度優先の最適化かければ関数でも速度は大差なんだろうけど。
0621デフォルトの名無しさん
2009/02/26(木) 23:57:25いや、差はなくなるよ。あったとしても、僅差だな。
0622デフォルトの名無しさん
2009/02/27(金) 00:14:43GC使うのはあきらめて、aprのメモリプールあたりでお茶を濁すとか。
0623476
2009/02/27(金) 00:16:44#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がつかわれてるので
詳しい方詳しく教えてください
0624デフォルトの名無しさん
2009/02/27(金) 00:22:46いい加減getsを使うのやめろ
0625476
2009/02/27(金) 00:23:56独習Cでgetsでてたので文字列を読み込むときはgetsってかいてあったので
0626デフォルトの名無しさん
2009/02/27(金) 00:24:59--
for (int ic = 0; p[ic] != '\0'; ++ic) {
if (ic > 0) putchar('-');
printf("%d", p[ic]);
}
0627デフォルトの名無しさん
2009/02/27(金) 00:25:520628デフォルトの名無しさん
2009/02/27(金) 00:27:07そんな本は早く捨てるんだ!
0629デフォルトの名無しさん
2009/02/27(金) 00:27:52>何故最初に*p=='\0' returnとやるんですか?
getsで空エンターをたたいて、
""が入力文字列となったとき、
*(p+1)は不定となるため、その防御
'-' は(出力文字数 - 1)だけ表示する
なので、whileでは(出力文字数 - 1)回繰り返しを行い(文字+'-')を出力し、
最後に1文字だけ問答無用で文字だけを出力する
0630デフォルトの名無しさん
2009/02/27(金) 00:29:370631476
2009/02/27(金) 00:31:34問題なく動きます
629さんわかりやすかったです!
でもC言語が完ぺきになるまでgetsとかscanfは使って良いんですか?
他のでやるんですか?使ってはダメな癖とかつくんでしょうか?
0632デフォルトの名無しさん
2009/02/27(金) 00:34:06現代日本語作文で古文でしか現れない文語の単語を
使うなというのと似てる。
意味が取り違えられる可能性が大だし、まず正しく
使えない。
0633デフォルトの名無しさん
2009/02/27(金) 00:34:52俺はいいと思うけどなぁ。
だって初心者だろ?
変に制限したら言語自体が嫌いになっちゃうよ。
…将来的には使わなくなると思いつつ使えば。
0634デフォルトの名無しさん
2009/02/27(金) 00:35:45わかってて使ってるならいいのかも知れなくもないが、
いまどきgetsを使えとはこれいかに。もはや後方互換のためにのみ存在する関数だろ。
char u[80];
gets(u);
uに100文字くらい入れてみればどうなるか。
その現象をこの関数で防げるか。
0635デフォルトの名無しさん
2009/02/27(金) 00:36:450636デフォルトの名無しさん
2009/02/27(金) 00:38:08そういう奥ゆかしいものじゃなく
いわゆる米俗語、つまりフォーレターワード(スラング)
に近い表現と似ている。
下手に使い回すとプロセスを壊す。
0637デフォルトの名無しさん
2009/02/27(金) 00:39:32開発の現場でもよくあるけど、変な癖があって、
よくないのは分かってるけど、あとでまとめてきれいにしようって思っても
たいてい時間がなくなってそのまま出荷せざるをえないなんてことになりがち
基準がはっきりしてる場合は最初から守るクセをつけておいたほうがよい
この場合、コンパイル時に警告がでないこと、とか
0638デフォルトの名無しさん
2009/02/27(金) 00:39:510639デフォルトの名無しさん
2009/02/27(金) 00:40:05getsで問題があるケースってどんなの?
0640デフォルトの名無しさん
2009/02/27(金) 00:40:50>634
0641デフォルトの名無しさん
2009/02/27(金) 00:54:39どうやれば簡単?
0642デフォルトの名無しさん
2009/02/27(金) 00:57:060643デフォルトの名無しさん
2009/02/27(金) 00:58:320644デフォルトの名無しさん
2009/02/27(金) 00:59:59危険すぎるだろ
0645デフォルトの名無しさん
2009/02/27(金) 01:01:150646デフォルトの名無しさん
2009/02/27(金) 01:01:250647デフォルトの名無しさん
2009/02/27(金) 01:04:540648デフォルトの名無しさん
2009/02/27(金) 01:11:23size_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;
}
0649デフォルトの名無しさん
2009/02/27(金) 01:12:500650デフォルトの名無しさん
2009/02/27(金) 01:18:590651デフォルトの名無しさん
2009/02/27(金) 01:21:040652デフォルトの名無しさん
2009/02/27(金) 01:22:060653デフォルトの名無しさん
2009/02/27(金) 01:24:310654デフォルトの名無しさん
2009/02/27(金) 01:32:27/´ . `ヽ 、
/ 、、: ヘ :::::::..... \
./ ‐-_ヽ!:...__>;::;;;;;;;::::::::...._ \
/ / \!´ \::::::::! ̄ ヽ、 ヽ,
`‐rt-'....,,,___」 \::! .ソ_,ノ
!:.\::::.. ヽ >、:.、../_,、!、
, --v‐- 、 _ ヽ::.ヽ::::.. `、 / ニ,:',.':::::::(´
, - ';;/::ノ.:::// l ̄`―`-:;;\::.. ヽ / /jヽ:::::::::::)-‐'チ、
//.:::;ィ'":;∠;_/.:::!::::::............. トr-;;_ `、 / ,.-=';`-- -‐ii' ミ!ユ、
..:ヽ-'⌒/::;;-‐'´ └‐┴‐-----=;;:.ヽ;:::::..:;ノ::.::.ヽ;:::::::....... .. .oo!!_,,..-"-┘.....
`┘ ´ ̄  ̄  ̄  ̄ ´
0655デフォルトの名無しさん
2009/02/27(金) 01:43:220656デフォルトの名無しさん
2009/02/27(金) 02:04:46でもどのみち素のgetsも安全じゃないし
オーバーフローしないだけマシかもよ
0657デフォルトの名無しさん
2009/02/27(金) 02:05:400658デフォルトの名無しさん
2009/02/27(金) 02:35:400659デフォルトの名無しさん
2009/02/27(金) 06:50:380660デフォルトの名無しさん
2009/02/27(金) 10:31:060661デフォルトの名無しさん
2009/02/27(金) 10:37:190662デフォルトの名無しさん
2009/02/27(金) 11:07:500663デフォルトの名無しさん
2009/02/27(金) 13:38:540664476
2009/02/27(金) 13:46:4510進数を文字にする変換をつくろうとしたんですが
読み込んで
ABCの656667を読み込むと一つの数字などとよみこまれてしまい難しいです
65、66、67と認識するにはどうすればいいんですか?
2次元配列におさめるんでしょうか?難しすぎです
おしえてください
0665デフォルトの名無しさん
2009/02/27(金) 14:17:58ソースがないと何ともいえんが俺の勘によると
printf("%d",array[i]);の"%d"部分を"%d\n"にすればいいのでは
0666デフォルトの名無しさん
2009/02/27(金) 14:24:200667デフォルトの名無しさん
2009/02/27(金) 14:32:090668デフォルトの名無しさん
2009/02/27(金) 14:34:5810進数で3桁になる文字(小文字の'd'以降とか)はどうするのか、とか。
プログラムはまず入力するものと出力するものを決める事から始める。
きちんと入力されるものが規定されてないと出力は決まらないんだよ。
例えばスペースで区切った文字コードを入力にすれば、
atoiとか使って意図する出力が得られるはず。
65 66 67 => A B C
0669デフォルトの名無しさん
2009/02/27(金) 14:46:08http://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/
0670デフォルトの名無しさん
2009/02/27(金) 14:53:12#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;
}
参考までに、皆さんはどんな風に書いているのか教えてください。
0671デフォルトの名無しさん
2009/02/27(金) 14:55:570672デフォルトの名無しさん
2009/02/27(金) 15:15:09釣り針見えてるぞ
0673デフォルトの名無しさん
2009/02/27(金) 15:17:31おぉー!
何かよく分からないけど、すごいですね!
他にも有りましたら、教えてください。
それにしても、printfかんすうを考えた人はすごいですね。
天才だと思いました。
2009ねん2がつ27にち
0674デフォルトの名無しさん
2009/02/27(金) 15:37:00は最近良く張られるが、コンピュータプログラミングは
あーみえてかなり長丁場な世界で、一年二年でどーにか
なる世界じゃないみたいだな
0675デフォルトの名無しさん
2009/02/27(金) 15:42:480676デフォルトの名無しさん
2009/02/27(金) 15:48:26いくこと。
結果最優先でやっていく世界とは多分違う
0677デフォルトの名無しさん
2009/02/27(金) 15:52:570678デフォルトの名無しさん
2009/02/27(金) 15:54:290679デフォルトの名無しさん
2009/02/27(金) 16:35:42Ken Tompson?
0680デフォルトの名無しさん
2009/02/27(金) 16:42:09> % cc -o a.out ~/src/misc/hw/hw.c
> % a.out
ワロタw
0681デフォルトの名無しさん
2009/02/27(金) 16:56:02>
> % letter
> letter: Command not found.
> To: ^X ^F ^C
> % help mail
> help: Command not found.
> % damn!
> !: Event unrecognized
> % logout
俺はこれがオキニだな
% が # だったりして・・・
0682デフォルトの名無しさん
2009/02/27(金) 17:14:23皆、すごいことをやっているように思えるのですが…
0683デフォルトの名無しさん
2009/02/27(金) 17:18:06>681は純粋に英語の問題だよ。
0684デフォルトの名無しさん
2009/02/27(金) 17:22:300685デフォルトの名無しさん
2009/02/27(金) 18:22:25勘と知恵と無鉄砲さを持ち合わせた人にしか共感できんネタだ。
0686デフォルトの名無しさん
2009/02/27(金) 18:25:00これはひどい
0687デフォルトの名無しさん
2009/02/27(金) 19:11:080688デフォルトの名無しさん
2009/02/27(金) 19:35:37世の中は、冗談でできてるって思う
0689デフォルトの名無しさん
2009/02/27(金) 19:37:02数値ならまあ場合によってそれでいいけど、
文字列は enum じゃ無理だよね
0690デフォルトの名無しさん
2009/02/27(金) 19:37:030691デフォルトの名無しさん
2009/02/27(金) 20:52:56/*円の直径と円周の関係を表にする*/
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なんですが・・
0692デフォルトの名無しさん
2009/02/27(金) 20:55:060693デフォルトの名無しさん
2009/02/27(金) 21:04:390694デフォルトの名無しさん
2009/02/27(金) 21:12:53釣りとわかっている魚の気分だ
0695デフォルトの名無しさん
2009/02/27(金) 21:15:38いやいや無限ループしてるから
0696デフォルトの名無しさん
2009/02/27(金) 21:16:55ブルースクリーンとか。
0697デフォルトの名無しさん
2009/02/27(金) 21:20:40Windows9x 系ならありうるな
0698デフォルトの名無しさん
2009/02/27(金) 21:23:53while の直後にセミコロンの単なる無限ループだもの
0699デフォルトの名無しさん
2009/02/27(金) 21:30:31燃えやすいものはそばにおいとかんようにな。
0700デフォルトの名無しさん
2009/02/27(金) 21:35:540701デフォルトの名無しさん
2009/02/27(金) 21:36:12計算機の利用率上げるとか。
0702691
2009/02/27(金) 21:57:43よく分かった、みんなサンクス
0703デフォルトの名無しさん
2009/02/27(金) 22:01:59文とか式とか勉強しとくと良いよ。
0704デフォルトの名無しさん
2009/02/27(金) 22:10:430705デフォルトの名無しさん
2009/02/27(金) 22:26:06と一瞬思ったけどやっぱそうでもないのかな
もう一つキーワードに複文を加えときたいけど
0706703
2009/02/27(金) 22:53:15そうかな。
もしそうだったらスマソ。
でも簡単にで良いから式、文、式文、複文などを勉強しておくと入門者でも結構見通しが良くなると思うんだよね。
0707デフォルトの名無しさん
2009/02/27(金) 23:00:38なれろ
鉄則
そんで金あったら
一冊本買え
0708デフォルトの名無しさん
2009/02/27(金) 23:14:260709デフォルトの名無しさん
2009/02/27(金) 23:19:11なんか回り見るとみんなjavaとか一生懸命やってるし、
本屋に行ってもjavaばっかりなんだけど。
自分としては初めて勉強し始めたのがCだからCを極めたいというのがあって、
それとなんかコード書いててCだとなんかしっくりっくるっていうか、落ち着くって言うか、
まあ、Cしか満足に知らないからかもしれないんだけど。
ここはこういうことを聞くところではないのかな?
他で聞いた方がいい?
0710デフォルトの名無しさん
2009/02/27(金) 23:22:57仕事なら使える言語は多ければ多いほどいい
0711デフォルトの名無しさん
2009/02/27(金) 23:25:03どんな言語でも極めるというのは大変だ。
とくにこの世界はいろんなこと知ってないと。
0712デフォルトの名無しさん
2009/02/27(金) 23:25:06そうしたら後は何をしても大抵大丈夫
0713デフォルトの名無しさん
2009/02/27(金) 23:31:12そろそろM$の方にも手を出した方がいいのかと自問自答している。
0714デフォルトの名無しさん
2009/02/27(金) 23:43:210715デフォルトの名無しさん
2009/02/27(金) 23:45:090716デフォルトの名無しさん
2009/02/27(金) 23:45:48まずM$とか意味不明な表記を改めた方がいい
0717デフォルトの名無しさん
2009/02/27(金) 23:48:040718デフォルトの名無しさん
2009/02/27(金) 23:49:550719デフォルトの名無しさん
2009/02/27(金) 23:50:200720デフォルトの名無しさん
2009/02/27(金) 23:51:480721デフォルトの名無しさん
2009/02/27(金) 23:52:190722デフォルトの名無しさん
2009/02/27(金) 23:52:240723デフォルトの名無しさん
2009/02/27(金) 23:57:34入門書いくら買っても勉強にならない程度の知識を持つってこと?
詳細な文法もしくは言語の規格に詳しくなるってこと?
それともコンパイラや規格などにおいて業界の第一人者になるってこと?
0724デフォルトの名無しさん
2009/02/28(土) 00:00:530725709
2009/02/28(土) 00:04:35あんまり突っ込まないで欲しいです。
ただこの前javaの本をちょっとだけ読んでみたら何書いてあるのか訳ワカランくてすこし焦った。このままでイイのかなって。
0726デフォルトの名無しさん
2009/02/28(土) 00:07:10プログラミングが出来るようになってくれば
落ちついて順序良く見ていけば理解できる
0727デフォルトの名無しさん
2009/02/28(土) 00:08:43学生ならCは勉強して置けよ。C++も。
RubyとかPHPとかも一個くらい勉強しておけ。
就職したらCOBOLだのABAPだのやらされるかもしれないけど、足しにはなるから。
0728709
2009/02/28(土) 00:10:48ところで今のところDOSの黒い画面でしかプログラムできてないんですけど、
winAPIって言うのはやはり覚えた方がいいのでしょうかね?
難しそうなんですけど。
これはC++でやればいいんでしょうか?
0729デフォルトの名無しさん
2009/02/28(土) 00:12:020730デフォルトの名無しさん
2009/02/28(土) 00:13:58rubyは1.8で終わった
0731デフォルトの名無しさん
2009/02/28(土) 00:14:54Cでもできるだろ。
とりあえず、形だけ習ってみて、やりたいことに合わせて書き換えろよ。
http://www.geocities.jp/ky_webid/win32c/index.html
0732デフォルトの名無しさん
2009/02/28(土) 00:16:53疲れた時の気晴らし程度でいい
余計疲れるかもしれないけどw
0733デフォルトの名無しさん
2009/02/28(土) 00:16:54すまん別にいじめるつもりではなかった
C言語自体は別に極端に難しい言語でもなんでもないし
使わなくても詳しくなっといて欲しいぐらいには重要な言語
まあそんなに一気にたくさん勉強する自信ないんだろうから
まずなんのためにプログラム言語を勉強したいのか言ってくれないと
C言語とJavaどっちを薦めればいいのかわからないよ
趣味でゲームやWIndowsアプリ作りたいのか
SEなどで食っていけるようになりたいのか
明確な目的は無く単にPCやプログラムに詳しくなりたいのか
Googleみたいな所に入れるスキルが欲しいのか
etc..
0734デフォルトの名無しさん
2009/02/28(土) 00:17:36Cの知識はもちろんだけど、API独特の流儀も学ばないといけないから大変だよ
0735デフォルトの名無しさん
2009/02/28(土) 00:20:25web前世紀の今、javaやっといたらしばらくは食えるだろう。
ネットワークな人ならCは必須だろうし、科学技術な人ならいまだにfortran現役だし。
ただ、スクリプト言語は便利なので1〜2つくらいはやっといていいと思う。
0736デフォルトの名無しさん
2009/02/28(土) 00:21:560737デフォルトの名無しさん
2009/02/28(土) 00:22:27ちなみに独特じゃないAPIってどんなの?
0738709
2009/02/28(土) 00:23:08どうも。参考にして見ます。でもAPIが解らないとプログラムって作れないんですよね?
俺の勘違い?
>>733
あのですね、何となくのイメージなんですよ、これが。初心者のですね。
Cって言うと、何となく地味にこつこつやるタイプのイメージ。
javaはOLとかが楽しそうにやってるイメージ(実際は全然違うんでしょうけど
なので自分はCをやろうかなと思った程度なんです。初めは。
0739デフォルトの名無しさん
2009/02/28(土) 00:30:10そんな事はない
でも、windowsのソフトを作ろうと思うなら
知っていて損はない
0740デフォルトの名無しさん
2009/02/28(土) 00:30:37WinはもはやWinAPI使うのがjkな感じに思えるんだが。
0741デフォルトの名無しさん
2009/02/28(土) 00:34:41Cで作らずにC++で作るメリットってなんですか?
0742デフォルトの名無しさん
2009/02/28(土) 00:34:45女子高生!
0743デフォルトの名無しさん
2009/02/28(土) 00:38:39Windowsで華やかなアプリ作りたいならC#
仕事の多いWeb系ならJavaやスクリプト言語
WIndowsプログラムは素人だけど
いまどきわざわざWin32APIをC言語で使ってもあんま嬉しいことないような気がする
0744デフォルトの名無しさん
2009/02/28(土) 00:40:12実際あることはあるよ。多くはないかもしれないが。
CでLinux用API作って、そのラッパーをWindowsで作ってWindowsAPIとして再利用。
0745デフォルトの名無しさん
2009/02/28(土) 00:49:27まあ、あんま嬉しいことはないなあ。
他人からもこんな面倒くせえことよくやったなあ
この程度の評価。
0746デフォルトの名無しさん
2009/02/28(土) 00:50:11そんな奴みたこと無い。設計者も含めてな
0747デフォルトの名無しさん
2009/02/28(土) 00:55:490748デフォルトの名無しさん
2009/02/28(土) 00:56:370749デフォルトの名無しさん
2009/02/28(土) 01:06:33ちょっとcpuやメモリを無駄遣いしてる気分になるのが
玉に瑕だな。
0750デフォルトの名無しさん
2009/02/28(土) 01:11:050751デフォルトの名無しさん
2009/02/28(土) 01:11:420752デフォルトの名無しさん
2009/02/28(土) 01:12:510753デフォルトの名無しさん
2009/02/28(土) 01:15:15でもってgcc以外を選ぶのはなぜだ?
0754デフォルトの名無しさん
2009/02/28(土) 01:16:540755デフォルトの名無しさん
2009/02/28(土) 01:17:400756デフォルトの名無しさん
2009/02/28(土) 01:19:02Cと同等の小回りを利かせながら、
Cを上回る抽象化能力を発揮できること。
0757デフォルトの名無しさん
2009/02/28(土) 01:19:430758デフォルトの名無しさん
2009/02/28(土) 01:21:42レベルはある程度関係なしに便利なエデイタは?
0759デフォルトの名無しさん
2009/02/28(土) 01:23:270760デフォルトの名無しさん
2009/02/28(土) 01:25:32デストラクタとテンプレートに尽きる
0761デフォルトの名無しさん
2009/02/28(土) 01:29:050762デフォルトの名無しさん
2009/02/28(土) 01:31:34vim
0763デフォルトの名無しさん
2009/02/28(土) 01:32:03フリーをタダだと思ってるならかなり痛いな
0764デフォルトの名無しさん
2009/02/28(土) 01:34:140765デフォルトの名無しさん
2009/02/28(土) 01:34:43ttp://www.ooyashima.net/db/prong.htm
ここを参考にやってみます。
0766デフォルトの名無しさん
2009/02/28(土) 01:35:59The requested URL /db/prong.htm was not found on this server.
Apache/1.3.39 Server at www.ooyashima.net Port 80
0767デフォルトの名無しさん
2009/02/28(土) 01:38:05手打ちなもんで。
GCCはMinGWかCygwinのどちらが
0768デフォルトの名無しさん
2009/02/28(土) 01:45:32只って意味だろ
0769デフォルトの名無しさん
2009/02/28(土) 01:52:31他に選択肢がある場合は基本的に使わないよ
0770デフォルトの名無しさん
2009/02/28(土) 02:00:07もちろんオフィスとかメールとかはwindowsだけど、開発はlinuxが95%だね。
あとはAIXとかsolarisとかかなぁ。
0771デフォルトの名無しさん
2009/02/28(土) 02:03:420772デフォルトの名無しさん
2009/02/28(土) 02:06:090773デフォルトの名無しさん
2009/02/28(土) 02:09:010774デフォルトの名無しさん
2009/02/28(土) 02:11:570775デフォルトの名無しさん
2009/02/28(土) 02:12:50eclipse 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とはデバッグ機能に雲泥の差があるよ。
0776デフォルトの名無しさん
2009/02/28(土) 02:17:30環境の理解にエネルギーの70%をさくのでは?
0777デフォルトの名無しさん
2009/02/28(土) 02:18:11それは真理だな。
0778デフォルトの名無しさん
2009/02/28(土) 02:18:36まさか開発環境構築に挫折未満中腰になるとは思いませんでしたww
0779デフォルトの名無しさん
2009/02/28(土) 02:23:41窓で開発するってのにlinux/unixでgccとか無いから
0780デフォルトの名無しさん
2009/02/28(土) 02:25:13Javaの開発でeclipse使ってデバッグしたときの感動は今も忘れないが、
今はgdbのお手軽さに・・・
0781デフォルトの名無しさん
2009/02/28(土) 02:25:49つcygwin
0782デフォルトの名無しさん
2009/02/28(土) 02:27:08最近Linuxのプログラム書こうとしてたのでUNIXのデバッグ話すげえ聞きたい
gdb以外にどんなものあるんだろうか?
gprofやgcovは基本かな
他にはvalgrindやgoogle-perftoolsぐらいしかわかんないわ
0783デフォルトの名無しさん
2009/02/28(土) 02:28:47バイナリハックを読めば参考になるものが発掘できるかもしれない
0784デフォルトの名無しさん
2009/02/28(土) 02:32:46目次見てきた
なるほど
0785デフォルトの名無しさん
2009/02/28(土) 02:35:09http://www.geocities.jp/aikuti89/100m.txt
↑を実行すると途中まではうまくいくのですが、タイムを入力する時点で
エラーが出てプログラムが終了してしまします。
どうしたらいいでしょうか?
0786デフォルトの名無しさん
2009/02/28(土) 02:44:22ところで ={0,} ってできたっけ?
0787デフォルトの名無しさん
2009/02/28(土) 02:46:560788デフォルトの名無しさん
2009/02/28(土) 02:47:20しかもハードコーディングされているしw
とりあえずscanfのパラメータがおかしいな
0789デフォルトの名無しさん
2009/02/28(土) 02:49:24これか
入力抑制してないじゃん
0790デフォルトの名無しさん
2009/02/28(土) 02:49:390791デフォルトの名無しさん
2009/02/28(土) 02:51:54gets使うなとか
printfに直で文字列ぶちこむなとか
0792デフォルトの名無しさん
2009/02/28(土) 02:54:590793デフォルトの名無しさん
2009/02/28(土) 03:01:27windows環境じゃelectric fence位しか動かないんだけど、
linuxのgccはコンパイル時に静的、動的領域のバッファオーバー(アンダー)ランを検出する
optionやライブラリが幾つかある。しかしlinux使ってると、簡単なリークやオーバーランが
すぐ見つかるんだよな。開発環境としては恵まれてても、機能を使わなきゃ、
何の意味も無いって事だ。もっとも、複雑なlibrary構成が原因で、追いきれないんだろうけど。
0794デフォルトの名無しさん
2009/02/28(土) 03:02:05数字を入力するときや、文字列を入力したいときにはどうすればいいのでしょうか?
0795デフォルトの名無しさん
2009/02/28(土) 03:04:310796デフォルトの名無しさん
2009/02/28(土) 03:06:01相当Cに慣れた頃に改めてscanfファミリーを教えるのが正しいと思うんだけどな
0797デフォルトの名無しさん
2009/02/28(土) 03:07:100798デフォルトの名無しさん
2009/02/28(土) 03:07:33間のプラットフォームやバージョン互換性が低いからト
ラブルの元になりがちなので凝ったのは使わないほうが
いいと聞いたのですが、実際どんなものなのでしょうか?
0799785
2009/02/28(土) 03:12:16scanfは使わないほうがいいみたいなので、
他の関数を使おうと思うのですが何を使ったらいいでしょうか?
0800デフォルトの名無しさん
2009/02/28(土) 03:13:420801デフォルトの名無しさん
2009/02/28(土) 03:17:32なるほどなあ
gccすげえ
man gcc してみたけどオプションたくさんあってどれのこと言ってるかさっぱりだ
Binary Hacksとか読みつつgccについてももう少し詳しくなってみようかなあ
0802デフォルトの名無しさん
2009/02/28(土) 03:17:43>>795見ろ
0803デフォルトの名無しさん
2009/02/28(土) 03:18:08|∧∧| (( ) ) (( ) ) ((⌒ )
__(;゚Д゚)___ (( ) ) (( ⌒ ) (( ) )
| ⊂l>>800 l⊃| ノ火.,、 ノ人., 、 ノ人.,、
 ̄ ̄|.|. .|| ̄ ̄ γノ)::) γノ)::) γノ)::)
|.|=.=.|| ゝ人ノ ゝ火ノ ゝ人ノ
|∪∪| ||∧,,∧ ||∧,,∧ || ボォオ
| | ∧ (´・ω・) (・ω・`) ∧∧
| | ( ´・ω) U) ( つと ノ(ω・` )
~~~~~~~~ | U ( ´・) (・` ). .と ノ
u-u ( ) ( ノ u-u
`u-u'. `u-u'
0804デフォルトの名無しさん
2009/02/28(土) 03:21:19もし君が正しい日本語を話しているつもりならもう1回教科書を読み直すこと
そうでないなら中学校からやりなおすこと
0805デフォルトの名無しさん
2009/02/28(土) 03:24:040806デフォルトの名無しさん
2009/02/28(土) 03:27:55書き慣れてる人は、無難で冗長な(その代わり読みやすい)、
コードを書く。つうかもう酔ったので寝る
0808デフォルトの名無しさん
2009/02/28(土) 03:39:17electric fenceってそんなもの使わなくても
VCなら、_CrtSetDbgFlag でメモリリークや簡単なオーバーラン
なら検出できるでしょ
単体テストレベルならたいていこれで十分だし、
VCの標準ライブラリとして存在するところは、むしろWindowsの
アドバンテージだと思う
さすがにコンパイル時にリークやオーバランの検出することまではできないけど
0809デフォルトの名無しさん
2009/02/28(土) 03:46:03メモリ容量は当然十分あるのにヒープがフラグメンテーションを起こして
mallocコマンドがNULLを返してくることがあるからfree関数は頻繁に
呼び出すことは避け、ある程度まとめてあるタイミングで一気に呼び出した
ほうが良い
と聞きましたが正しいでしょうか?
(フラグメンテーションの兆候としてmallocがやたらと時間がかかる
ようになるとか聞きました)
0810デフォルトの名無しさん
2009/02/28(土) 05:32:43フラグメントが問題になる・するようなら、
mallocの回数を減らすほうがよっぽど世間でよく行われる対策だと思う。
0811デフォルトの名無しさん
2009/02/28(土) 05:33:21たしかにその通り
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とか
0812デフォルトの名無しさん
2009/02/28(土) 10:59:00> ほうが良い
これが結局 exit ぐせになる
0813デフォルトの名無しさん
2009/02/28(土) 11:22:140814デフォルトの名無しさん
2009/02/28(土) 13:50:34まとめて、というより、要らなくなったらすぐに free すればいい
わざわざfreeを遅延させても意味はない
フラグメント対策なら、malloc/free をいじるより、確保するサイズを
揃える(例えば2のn乗)方がいい
0815デフォルトの名無しさん
2009/02/28(土) 13:58:320816デフォルトの名無しさん
2009/02/28(土) 14:03:29>>814
>>814
>>814
0817デフォルトの名無しさん
2009/02/28(土) 14:07:22そういう細かいことはどうでもよくて、確保するサイズを揃える方が
効果あるってこと
0818デフォルトの名無しさん
2009/02/28(土) 14:08:590819デフォルトの名無しさん
2009/02/28(土) 14:11:19揃えると何故フラグメント対策になるんだ?
全く理解不能。
サイズを揃えることとフラグメントは全く関係ない。
0820デフォルトの名無しさん
2009/02/28(土) 14:12:03そんなことは入門の間はあんまし気にしなくていい。
中級くらいでも気にしなくていいケースの方が多い。
0821デフォルトの名無しさん
2009/02/28(土) 14:25:02言われてますが、具体的にどう区別したらいいでしょうかね?
0822デフォルトの名無しさん
2009/02/28(土) 14:32:000823デフォルトの名無しさん
2009/02/28(土) 14:33:35普通の malloc は未規定の実装だ
特定の malloc に依存した最適化をやるなら環境を判別すべき
0824デフォルトの名無しさん
2009/02/28(土) 14:40:53サイズが揃えるというよりもallocする最小単位を例えば64K単位に切り上げると規約してコーディングするとmalloc管理ポインタの数が減ってmallocの処理速度は早くなる傾向はあるだろうね。
フラグメンテーションが問題になるのはmarkやreleaseなどの
あるポインタより上位アドレスにあるヒープブロックの一層
プロシージャが用意されてるPASCAL系言語の話でCは実は余り
関係が無い(と思うよ)。
ただ最近のmallocは処理速度をかなり重視しているので、
空き領域検索の最適検索を適当にしてfirst-matchストラテジーに
近づいてる傾向があるので。フラグメンテーションが発生すると
NULLを返す確率が増えると聞く。
その意味でもなるべく小さなブロックを作らないように心がける
というのは良いことだろうと思う
0825デフォルトの名無しさん
2009/02/28(土) 14:44:15独自実装やるくらいなら何も考えずそのまま使った方が安定してたりすんじゃないか
なので全体でなく、具体的なボトルネックを見つけ出して、ピンポイントに地道な
改善(リスト=>配列とか)を積み重ねていくことを考えたほうがいいと思う
0826デフォルトの名無しさん
2009/02/28(土) 14:44:21C言語&java&phpを覚えるには1月では不可能でしょうか。
0827デフォルトの名無しさん
2009/02/28(土) 14:46:08求められているレベルにも依存する
が、個人的には無理なんじゃないかという気はする
0828デフォルトの名無しさん
2009/02/28(土) 14:49:24可能。
1言語1週間で残りの1週間でschemeを覚えるべき。
0829デフォルトの名無しさん
2009/02/28(土) 14:52:18そのとおり
0830デフォルトの名無しさん
2009/02/28(土) 15:04:07本当は1年で1言語くらいがちょうどいいん。
0831デフォルトの名無しさん
2009/02/28(土) 15:05:00よほどバカなんだな
0832デフォルトの名無しさん
2009/02/28(土) 15:05:520833デフォルトの名無しさん
2009/02/28(土) 15:06:420834デフォルトの名無しさん
2009/02/28(土) 15:08:31ただそれだけのレベルにしかならないが。
0835デフォルトの名無しさん
2009/02/28(土) 15:12:310836デフォルトの名無しさん
2009/02/28(土) 15:15:370837デフォルトの名無しさん
2009/02/28(土) 15:17:47は難しいだろうな
0838デフォルトの名無しさん
2009/02/28(土) 15:18:380839デフォルトの名無しさん
2009/02/28(土) 15:21:020840デフォルトの名無しさん
2009/02/28(土) 15:21:09お前はもう帰っていい。
0841デフォルトの名無しさん
2009/02/28(土) 15:22:340842デフォルトの名無しさん
2009/02/28(土) 15:23:090843デフォルトの名無しさん
2009/02/28(土) 15:26:49んなアホな。普通の手続き型言語なら、文法とライブラリの編成を憶えりゃ(1〜2週間くらい)、あとはマニュアル引き引きである程度何とかなる。
(特殊な概念があるものについてはものによるが)
まぁ、1言語を1年かけて深くやるのは悪くないやり方だ。
「達人プログラマー」(黒い方)にも1年に1つ言語を学ぶべしって書いてある。
0844デフォルトの名無しさん
2009/02/28(土) 15:28:36ライブラリは別だが
0845デフォルトの名無しさん
2009/02/28(土) 15:29:29でもうちには来てほしくない。
0846デフォルトの名無しさん
2009/02/28(土) 15:30:030847デフォルトの名無しさん
2009/02/28(土) 15:32:540848デフォルトの名無しさん
2009/02/28(土) 15:37:570849デフォルトの名無しさん
2009/02/28(土) 15:42:20先ずは1週間続けてみろ。話はそれからだ。
0850デフォルトの名無しさん
2009/02/28(土) 15:54:57仕上げていくきだろ
0851デフォルトの名無しさん
2009/02/28(土) 15:56:11なに、1週間にこだわってんの?
0852デフォルトの名無しさん
2009/02/28(土) 15:57:540853デフォルトの名無しさん
2009/02/28(土) 15:59:161週間だからと自分に言い訳する程度だ
0854デフォルトの名無しさん
2009/02/28(土) 15:59:590855デフォルトの名無しさん
2009/02/28(土) 16:03:070856デフォルトの名無しさん
2009/02/28(土) 16:03:111年かけて謙虚に勉強しろ。
0857デフォルトの名無しさん
2009/02/28(土) 16:05:44Cなんてちょっとセンスがあれば1週間で覚えられる言語だよ
そんな大変な言語じゃない
逆に言えば、そのシンプルさがCの良さだ
0858デフォルトの名無しさん
2009/02/28(土) 16:07:480859デフォルトの名無しさん
2009/02/28(土) 16:09:230860デフォルトの名無しさん
2009/02/28(土) 16:10:410861デフォルトの名無しさん
2009/02/28(土) 16:11:000862デフォルトの名無しさん
2009/02/28(土) 16:11:10本当に覚えてればいいが
覚えた気になってるだけの人はたちが悪いw
0863デフォルトの名無しさん
2009/02/28(土) 16:11:230864デフォルトの名無しさん
2009/02/28(土) 16:11:56匿名掲示板で何言ったってアホ?の一言で終了できる。
0865デフォルトの名無しさん
2009/02/28(土) 16:12:170866デフォルトの名無しさん
2009/02/28(土) 16:12:40おまえもな
0867デフォルトの名無しさん
2009/02/28(土) 16:15:430868デフォルトの名無しさん
2009/02/28(土) 16:16:300869デフォルトの名無しさん
2009/02/28(土) 16:17:53カエルには解らないだろうけどな
0870デフォルトの名無しさん
2009/02/28(土) 16:18:040871デフォルトの名無しさん
2009/02/28(土) 16:19:060872デフォルトの名無しさん
2009/02/28(土) 16:19:38一週間バリバリ勉強して、3年ちんたら勉強した後に、バリバリ仕事してんだろww
0873デフォルトの名無しさん
2009/02/28(土) 16:21:070874デフォルトの名無しさん
2009/02/28(土) 16:26:130875デフォルトの名無しさん
2009/02/28(土) 16:33:540876デフォルトの名無しさん
2009/02/28(土) 16:34:440877デフォルトの名無しさん
2009/02/28(土) 16:40:160878デフォルトの名無しさん
2009/02/28(土) 16:40:42それが使えるかどうかだなまさに
0879デフォルトの名無しさん
2009/02/28(土) 16:42:43もはや意地になって書き込んでるとしか思えん
0880デフォルトの名無しさん
2009/02/28(土) 16:44:04センスが無ければ3年あってもCを使えない。
それだけ。
0881デフォルトの名無しさん
2009/02/28(土) 16:44:140882デフォルトの名無しさん
2009/02/28(土) 16:45:04こいつアホ臭すぎる。もう意味ねぇ。
0883デフォルトの名無しさん
2009/02/28(土) 16:46:100884デフォルトの名無しさん
2009/02/28(土) 16:47:06でもそれなりの使い手になるには相応の時間が必要だ。
0885デフォルトの名無しさん
2009/02/28(土) 16:50:42>>880が目指してるのはあくまでやさしいCレベルだし。
0886デフォルトの名無しさん
2009/02/28(土) 16:57:580887デフォルトの名無しさん
2009/02/28(土) 16:58:35一週間で完璧に出来る奴がいたら見てみたいw
0888デフォルトの名無しさん
2009/02/28(土) 16:59:180889デフォルトの名無しさん
2009/02/28(土) 17:00:20随分レベルの低いコミュニティーに属しているんだな
0890デフォルトの名無しさん
2009/02/28(土) 17:01:09例えばweb上で保険の加入システムのようなシステムを作るには、
何が必要でしょうか。
HTMLとCとoracleがあれば無償で作成可でしょうか。
oracleではなくSQLでしょうか。
トンチンカンですみません。
0891デフォルトの名無しさん
2009/02/28(土) 17:01:570892デフォルトの名無しさん
2009/02/28(土) 17:02:20売り物になるには程遠い
0893デフォルトの名無しさん
2009/02/28(土) 17:03:03>>889に取ってのレベルの低い高いは一般の意味と違うんだよ
0894デフォルトの名無しさん
2009/02/28(土) 17:05:16まさに、井の中の蛙的発言だな。君は大海を知った方がいいよ。
0895デフォルトの名無しさん
2009/02/28(土) 17:05:50レベルの高いコミュニティーに属してから言えよww
0896デフォルトの名無しさん
2009/02/28(土) 17:06:58WebProg板へどうぞ。
0897デフォルトの名無しさん
2009/02/28(土) 17:08:01CGI
0898デフォルトの名無しさん
2009/02/28(土) 17:10:05せいぜい匿名掲示板で天才ぶれよw
0899デフォルトの名無しさん
2009/02/28(土) 17:10:550900デフォルトの名無しさん
2009/02/28(土) 17:12:580901デフォルトの名無しさん
2009/02/28(土) 17:13:41実はセンスがあれば1週間で使えるようになるなんて信じたくないよな。
自分がセンスが無いと認めてしまうことになるからな。
自尊心がそれを許さないんだろう。
0902デフォルトの名無しさん
2009/02/28(土) 17:14:461週間っていうのを押し通したいか屈するかの問題だろ。
消防の話だと思ってスルーしてくれ。
0903デフォルトの名無しさん
2009/02/28(土) 17:14:480904デフォルトの名無しさん
2009/02/28(土) 17:17:13それは真理だな。
0905デフォルトの名無しさん
2009/02/28(土) 17:20:58大海:腐った水たまり
蛙:大会に住むボウフラ
覚えた:やさしいCを読破した
センス:うんこ波の自尊心
それでは続きをお楽しみ下さい。
0906デフォルトの名無しさん
2009/02/28(土) 17:25:46で、何このスレの速さ?
0907デフォルトの名無しさん
2009/02/28(土) 17:30:54オメ!
24はだらだら長く続くからちょっと飽きるけど、でも見ちゃうな。
0908デフォルトの名無しさん
2009/02/28(土) 18:04:45CGIはPHPで実現が可能なのですよね。
本屋で色んな本を立ち読みしましたが、
業務webアプリケーションを構築するにはHTMLとPHPまたはJAVAとSQLがあればよいみたいに書いてました。
PHPとJAVAはwebアプリケーションを作るにあたってはちがいがないと考えてよいでしょうか。
0909デフォルトの名無しさん
2009/02/28(土) 18:10:02大海を知るあなたたちがどういう海でCを一週間で使えるようにしなければいけないのか。
他の言語は関係なさそうだよね、流れとしては。
0910デフォルトの名無しさん
2009/02/28(土) 18:30:210911デフォルトの名無しさん
2009/02/28(土) 18:35:530912デフォルトの名無しさん
2009/02/28(土) 18:40:140913デフォルトの名無しさん
2009/02/28(土) 18:47:130914デフォルトの名無しさん
2009/02/28(土) 18:50:190915デフォルトの名無しさん
2009/02/28(土) 18:55:480916デフォルトの名無しさん
2009/02/28(土) 18:58:00涙拭けよww
0917デフォルトの名無しさん
2009/02/28(土) 18:59:430918デフォルトの名無しさん
2009/02/28(土) 19:00:530919デフォルトの名無しさん
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:::::! =宸n'´ /::::::レ'ヽ.
い .よ .| / /:::::::レ'/ムヽ. /::::::::/ ヽ.
! ! ! ./ ,':::::::::::!/ ハ:::::`´:::::::::::;' ',
0920デフォルトの名無しさん
2009/02/28(土) 19:04:13一週間でCができるようになる人の存在は認められませんw
0921デフォルトの名無しさん
2009/02/28(土) 19:17:020922デフォルトの名無しさん
2009/02/28(土) 19:18:570923デフォルトの名無しさん
2009/02/28(土) 19:24:250924デフォルトの名無しさん
2009/02/28(土) 19:25:390925デフォルトの名無しさん
2009/02/28(土) 20:22:340926デフォルトの名無しさん
2009/02/28(土) 20:28:010927デフォルトの名無しさん
2009/02/28(土) 20:41:140928デフォルトの名無しさん
2009/02/28(土) 20:56:490929デフォルトの名無しさん
2009/02/28(土) 21:01:32当然、結合テストまでのデバックやその環境(ダミーモジュールやツールを作ったりいろいろ)、上位行程までの試験環境の構築、業務を把握しな
ければならない本番データや異常処理まで含めなければプロとしては精通しているとはいえないだろ
それに、言語が違えば使えるツールや使用できるDBやらもろもろ変わってくる場合がある マニュアルやドキュメントだってないかもしれない
そんな状況で1週間で把握したものがどれ程のものになる いくら他の言語をしっていても加速するまではそれ相応の時間がかかる
0930デフォルトの名無しさん
2009/02/28(土) 21:04:50ばあちゃんを侮るな
0931デフォルトの名無しさん
2009/02/28(土) 21:06:16何が「安全」なのか知らないが、シフトより2のn乗で割るのが簡単だろうね。
0932デフォルトの名無しさん
2009/02/28(土) 21:06:53コンピュータおばあちゃんkwsk
0933デフォルトの名無しさん
2009/02/28(土) 21:41:18CGIはPHPで実現が可能なのですよね。
本屋で色んな本を立ち読みしましたが、
業務webアプリケーションを構築するにはHTMLとPHPまたはJAVAとSQLがあればよいみたいに書いてました。
PHPとJAVAはwebアプリケーションを作るにあたってはちがいがないと考えてよいでしょうか・・・
(T_T)。
0934デフォルトの名無しさん
2009/02/28(土) 21:43:170935デフォルトの名無しさん
2009/02/28(土) 21:43:23変な改行する奴が何言っても説得力がないw
0936デフォルトの名無しさん
2009/02/28(土) 21:46:00言葉を返せなくなったのかw
0937デフォルトの名無しさん
2009/02/28(土) 21:49:29それって職場になじむまでの話だろ。
言語の習得と全く関係のない話だ。
0938デフォルトの名無しさん
2009/02/28(土) 21:50:26勝手に意味わかんない条件つけんなw
0939デフォルトの名無しさん
2009/02/28(土) 21:51:07それでは通用しないだろ
0940デフォルトの名無しさん
2009/02/28(土) 21:52:380941デフォルトの名無しさん
2009/02/28(土) 21:53:300942デフォルトの名無しさん
2009/02/28(土) 21:54:25お前は環境が変わるということをわかっているのか
0943デフォルトの名無しさん
2009/02/28(土) 21:55:120944デフォルトの名無しさん
2009/02/28(土) 21:56:36おまえは他の言語を習得して使えもんになるのかといったな
0945デフォルトの名無しさん
2009/02/28(土) 21:58:18おまえは言語変わっても環境はそのままだと思うのか
0946デフォルトの名無しさん
2009/02/28(土) 21:58:28どんなエキスパートだって俺ライブラリーに慣れるには時間がかかるだろ。
言語の習得と、特定の環境への適応は全く別の話だ。
特定の環境への適応を言い出したら、世の中にプログラミング言語を取得している奴なんていなくなる。
>>929はまったくバカな議論だ。
0947デフォルトの名無しさん
2009/02/28(土) 21:59:410948デフォルトの名無しさん
2009/02/28(土) 22:00:00使える人間になるまでの話をしている
0949デフォルトの名無しさん
2009/02/28(土) 22:00:57一人でしてろ。馬鹿。
0950デフォルトの名無しさん
2009/02/28(土) 22:01:06あたりまえだ
0951デフォルトの名無しさん
2009/02/28(土) 22:02:390952デフォルトの名無しさん
2009/02/28(土) 22:05:020953デフォルトの名無しさん
2009/02/28(土) 22:06:040954デフォルトの名無しさん
2009/02/28(土) 22:07:320955デフォルトの名無しさん
2009/02/28(土) 22:08:59>>929の理論では、雇い先ごとに開発環境が違って、初期状態では誰もスキルなんて持ってないから
誰を雇っても同じだ。
0956デフォルトの名無しさん
2009/02/28(土) 22:09:11PGとしては一流でもスルースキルは三流ですか
0957デフォルトの名無しさん
2009/02/28(土) 22:10:030958デフォルトの名無しさん
2009/02/28(土) 22:11:290959デフォルトの名無しさん
2009/02/28(土) 22:11:50全員アンカつけてやれ。
0960デフォルトの名無しさん
2009/02/28(土) 22:13:33あほか、だから言語という共通のスキルだけでもあわせようとする
0961デフォルトの名無しさん
2009/02/28(土) 22:15:41おまえは言語がかわるとはどういうことかわかっているのかOSも変わる可能性だってある
0962デフォルトの名無しさん
2009/02/28(土) 22:17:560963デフォルトの名無しさん
2009/02/28(土) 22:19:04こまらないならスキルに使用言語を削除するか
0964デフォルトの名無しさん
2009/02/28(土) 22:21:410965デフォルトの名無しさん
2009/02/28(土) 22:25:220966デフォルトの名無しさん
2009/02/28(土) 22:25:24XP->Vistaでもプログラムかなり変えたしなぁ
0967デフォルトの名無しさん
2009/02/28(土) 22:26:590968デフォルトの名無しさん
2009/02/28(土) 22:30:02右シフトは論理なのか算術なのかは未定義だったような
0969デフォルトの名無しさん
2009/02/28(土) 22:31:190970デフォルトの名無しさん
2009/02/28(土) 22:38:52だから、その「言語という共通のスキル」は1週間で身につけられる。
0971デフォルトの名無しさん
2009/02/28(土) 22:45:051週間で身につけたものはスキルとは言わない
0972デフォルトの名無しさん
2009/02/28(土) 22:47:11ならば「言語という共通のスキル」は>>971定義の「スキル」ではないというだけのこと。
だから何?
0973デフォルトの名無しさん
2009/02/28(土) 22:48:38自分:「はい、大丈夫です」
面接官:「ご経験はどのくらいで?」
自分:「1週間です」
面接官:「( ゚д゚)・・・」
0974デフォルトの名無しさん
2009/02/28(土) 22:49:55ワロタ
0975デフォルトの名無しさん
2009/02/28(土) 22:51:420976デフォルトの名無しさん
2009/02/28(土) 22:52:23当然そのあと技術面接するんだろ?マスターしていれば1週間で10年でも変わりない。
0977デフォルトの名無しさん
2009/02/28(土) 22:53:54製作者に俺の名前が入ってるフリーのソースが20ほどネットでゲットできますよ、とかいえば
そのソース次第ではいい印象かも。
0978デフォルトの名無しさん
2009/02/28(土) 22:55:141週間なら簡易HTTPサーバーくらいじゃないか?
0979デフォルトの名無しさん
2009/02/28(土) 22:55:22成果物がないスキルは不要だ
0980デフォルトの名無しさん
2009/02/28(土) 22:58:24言語のスキルなんて適当に問題出してその場で答えさせればすぐ分かるよ。
0981デフォルトの名無しさん
2009/02/28(土) 22:59:52実際そこまでするか?って感じ。
履歴書に開発経験を数行書いておけばいい希ガス
0982デフォルトの名無しさん
2009/02/28(土) 23:00:360983デフォルトの名無しさん
2009/02/28(土) 23:01:49その程度の会社なら、その程度の採用判断でいいんじゃないの?
うちの会社じゃあり得ないけど。
0984デフォルトの名無しさん
2009/02/28(土) 23:01:490985デフォルトの名無しさん
2009/02/28(土) 23:02:59ここでは中途の話をしてるのかと思ったが・・・
逆に新卒で面接のみってのはほとんどないだろう。
0986デフォルトの名無しさん
2009/02/28(土) 23:03:20この前クビにした使えない派遣が次の就活でどんな素敵な開発経験を書いていることやら。
0987デフォルトの名無しさん
2009/02/28(土) 23:04:06その代り使えないと判断されたときの切り方も神速だが。
0988デフォルトの名無しさん
2009/02/28(土) 23:04:520989デフォルトの名無しさん
2009/02/28(土) 23:05:060990デフォルトの名無しさん
2009/02/28(土) 23:09:060991デフォルトの名無しさん
2009/02/28(土) 23:10:00俺のこと?
0992デフォルトの名無しさん
2009/02/28(土) 23:10:540993デフォルトの名無しさん
2009/02/28(土) 23:11:180994デフォルトの名無しさん
2009/02/28(土) 23:11:500995デフォルトの名無しさん
2009/02/28(土) 23:11:590996デフォルトの名無しさん
2009/02/28(土) 23:15:200997デフォルトの名無しさん
2009/02/28(土) 23:15:370998デフォルトの名無しさん
2009/02/28(土) 23:15:410999デフォルトの名無しさん
2009/02/28(土) 23:16:011000デフォルトの名無しさん
2009/02/28(土) 23:16:1310011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。