C言語なら俺に聞け( ..
[2ch|▼Menu]
2:デフォルトの名無しさん
10/04/11 00:41:48
2

3:デフォルトの名無しさん
10/04/11 01:37:57
さてvoid main認容問題から再開しようか

4:デフォルトの名無しさん
10/04/11 01:42:16
void main にすべきと言わなきゃ別にOK

5:デフォルトの名無しさん
10/04/11 03:32:21
int mainの戻り値って具体的には何に使われてるの?
コマンドプロンプトやシェルスクリプトが利用するってのは聞いたことがあるんだけど、
それを利用して何を処理してんの?

6:デフォルトの名無しさん
10/04/11 03:42:50
>>5
具体的な例で言うと、testコマンドなんかは
条件を満たしたときの戻り値が0、満たさなかったときの戻り値が0以外だな。

あと、変り種なコマンドとして、 : というのもある。
これは何をするのかというと、何もせず、戻り値として0を返すコマンドだ。

7:デフォルトの名無しさん
10/04/11 03:48:11
>>5
プログラムが成功したか失敗したかを判断するのに使う
プログラムが動作失敗したらもうそれ以上処理を続行したくないとき
などで見るのが一般的な使い方になる

Linuxのデーモン起動スクリプトなどはこれを積極的に利用してて
プログラムが正常に終了しなかったときに処理を停止する機能を
先頭で有効にしていたりする。(set -e)

8:デフォルトの名無しさん
10/04/11 03:50:39
>>6-7
分かりやすくありがとう

9:デフォルトの名無しさん
10/04/11 06:04:23
なぜ long main(...)とか float main( ... )とかdouble main( .... )って
駄目なんだ?

10:デフォルトの名無しさん
10/04/11 08:37:10
なぜお釣りが好きなのか?

11:デフォルトの名無しさん
10/04/11 12:29:22
>>9
別にダメじゃないだろ
定義されていないだけで

12:デフォルトの名無しさん
10/04/11 12:39:17
>>9
多分起動元で値がとれない。

13:デフォルトの名無しさん
10/04/11 14:39:55
>>9
それをintと置き換える意味がほとんどないからです。

14:デフォルトの名無しさん
10/04/11 15:20:37
>>9 そういう風に main() の呼び出し元や、めぐってはプロセス起動元がつくられていないから。
void と int が交換可能なのは、たまたま大概の処理系がそうなっているからだけのこと。

15:デフォルトの名無しさん
10/04/11 15:25:00
>>14
一応訂正しとくけど、voidとintは交換可能ではないよ。
一般的なOSでは戻り値にintを期待してて、voidでは値が返却されず不定になってるけど
呼び出し元がたまたま戻り値を利用しないから問題にならないだけで。

16:デフォルトの名無しさん
10/04/11 15:29:44
戻り値を利用するときに困るけどね
make で使おうと思ったら勝手に止まったり

17:デフォルトの名無しさん
10/04/11 15:33:43
>>15
不定にならない処理系もある。M$ とか。

18:デフォルトの名無しさん
10/04/11 16:09:02
>>17
それはコンパイラの親心機能だな。

19:デフォルトの名無しさん
10/04/11 16:42:21
さあね

20:デフォルトの名無しさん
10/04/11 17:20:07
>>10
さすがにこのネタも古くなり、以前のようには釣れなくなってきました。

21:デフォルトの名無しさん
10/04/11 17:38:52
>>20
釣り方に品が無い。
そもそもintってなんだよw、とか8bit時代はどうしてたんだよw、とか
今までとは違う方向へ話が広がるように釣ってくれないと。

22:デフォルトの名無しさん
10/04/11 18:48:59
URLリンク(codepad.org)

SSE を使うときに便利な構造体。
同じ128ビット内の内容を、byteやfloatやx,y,z,wで指せて便利。
asm("movaqu %0,%%xmm1;":"+m"(xmm));って風にそのままインラインアセンブラにも渡せて簡単。(ニモニックうろおぼえ)
配列にして渡せば、そのままパイプでだーーっと一度に計算できてたぶん速い。たぶん。
…いや、べつに。…なんとなく。


23:デフォルトの名無しさん
10/04/11 19:08:28
>>22
wって何に使うの?

24:デフォルトの名無しさん
10/04/11 19:09:23


25:デフォルトの名無しさん
10/04/11 19:31:38
>>22
共用体を初めて知ったの?

26:デフォルトの名無しさん
10/04/11 19:35:03
レジスタをエミュレートしたりするのにunion使うのは昔からされていること

27:デフォルトの名無しさん
10/04/11 19:50:28
_m128*使えよ
あれ共有体だぞ

28:22
10/04/11 20:49:02
>>23
しらね

29:デフォルトの名無しさん
10/04/11 21:55:07
REGS共用体とか懐かしい

30:デフォルトの名無しさん
10/04/11 23:26:57
8086時代のCか
MSDOSコールを嫌というほど書いた思い出があるな

farポインタとかhugeポインタ死ねよ

31:デフォルトの名無しさん
10/04/12 03:30:28
>>30
far ポインタは良く使ったな。huge ポインタはときに seg:off で off が一回りしたときに seg をインクリメントしてくれないことがあるので怖くてちかづかなかった。

32:デフォルトの名無しさん
10/04/12 03:49:20
64kもあればどんな事だってできると思ってた・・・
1MのRAMすら広すぎてもてあましてた
8MのRAMなんて高くて手が届かなかった

33:デフォルトの名無しさん
10/04/12 07:13:19
・・・

34:デフォルトの名無しさん
10/04/12 08:33:35
メモリチェックが長くてうざいと感じたあのころ

35:デフォルトの名無しさん
10/04/12 10:25:59
>>31
farポインタの糞仕様に参ってたよ
1MB空間のどこでも指せるのに、そこから64KBしかアクセスできないと来たもんだ
巨大配列はhuge配列にするしかなかった
しかもものすごく遅いし

32bitになってフラットモデルと聞いて小躍りしたよ

36:デフォルトの名無しさん
10/04/12 13:15:40
>>35
おまえ凄い勘違いしてるぞ、far はただの修飾子だよ。

37:デフォルトの名無しさん
10/04/12 13:23:23
そうだね、farポインタなら常にセグメントアドレスを使うから64KBを超えてアクセスできるね。
遅いし、64KBを超える配列の場合オブジェクトサイズが2の冪乗に限定されるけど。

38:デフォルトの名無しさん
10/04/12 13:38:08
>>36
far配列の事ではないかと

39:デフォルトの名無しさん
10/04/12 19:33:27
誰かご存知の方がいらっしゃったら教えて頂きたいのですが…。

HP-UX 11iV2とHP-UX 11iV3 とでfreadの返り値が変わるなんてこと有り得ますかね?

utmpx読み込んで接続元のip割り出してたら、下記while文で無限ループしてしまいました。

while(fread(&u, sizeof(struct utmpx), 1, fp)==1) {

延々と1が帰ってくるはず無いんだが…。
いやね、問題が起きてるの、11iv2なんだけどさ、
再現環境作りたいんだが、手元に11iv3しか無くてションボリ。

ご存知の方いらっしゃいましたら助けてください。


40:デフォルトの名無しさん
10/04/12 20:32:58
>39
fread()の戻り値は、読み込んだ要素数だから、この場合、fpのファイルの終端になると1より小さい値を返すと思う、うん

とりあえず、fread()について
HP-UX 11i v2 fread(3S)
URLリンク(docs.hp.com)
HP-UX 11i v3 fread(3S)
URLリンク(docs.hp.com)
若干変わったみたいだけど、それが原因とは思えない

もう一度、本当にそのwhileで無限ループになっているのか確認した方がいい
また、そのwhileで無限ループになったと判断した理由を教えてもらいたい
差し支えなければ、その行を含む前後のコード、または、コンパイル単位のソースコード、あるいは、そのソフトウェアの全ソースコードを見せてください

41:デフォルトの名無しさん
10/04/12 21:06:59
>40
せっかく返信くれたのに申し訳ないんだが、全部は見せれない。ごめん。
ip取得でループから抜け出せないのはなんとなく想定できてたんで、現地環境で
if (ut.ut_type!=USER_PROCESS) {の上の行にprintfはさんで、ループしてることを特定、
その後fread(&ut, sizeof(struct utmpx), 1, rp)==1をfread(&ut, sizeof(struct utmpx), 1, rp) != 0
に変更して再コンパイルし、正常稼動を確認。
PIDCheckはutmpxのpidが正しいものかチェックしている関数
うーん、永遠に1が帰ってきてるとも考えづらいんですけど、別の原因だとすると、==1 を!=0にしたことで現象が改善する理由が不思議なんですよ。

42:デフォルトの名無しさん
10/04/12 21:08:03
int IPGET(int pid, char *IP)
{
FILE *rp;
struct utmpx ut;
rp = fopen(UTMPX_FILE, "rb");
if (fp == NULL) {
return 0;
}
memset(&ut, 0, sizeof(struct utmpx));
while(fread(&ut, sizeof(struct utmpx), 1, rp)==1) {
if (ut.ut_type!=USER_PROCESS) {
memset(&u, 0, sizeof(struct utmpx));
continue;
}
if (PIDCheck(ut.ut_pid) == 1) {
fclose(fp);
strcpy(IP,ut.ut_host);
return 1;
}
memset(&u, 0, sizeof(struct utmpx));
}
fclose(rp);
return 0;
}

43:デフォルトの名無しさん
10/04/12 23:03:11
これからC言語を学ぼうと思います。
まず最初に準備するものを教えてください

44:デフォルトの名無しさん
10/04/12 23:04:54
ロベール

45:デフォルトの名無しさん
10/04/12 23:05:02
この板に二度と来ないという決断

46:デフォルトの名無しさん
10/04/12 23:20:02
>41
いろいろな角度から検証してみた、ってか、よくわからなくなってきた
気持ち悪いけど、とりあえず!=0で運用してください
[メモリ破壊](25%)
ぱっと見では、していないようだ
あるとしたら、fread(), fclose(), strcpy()だが、fread()以外はそのすぐ後でreturnしているので、whileの無限ループに関与する可能性は低い
fread()については後述、それにしても、memset()を呼び出す必要はあるのか

[マルチスレッド](0%)
スレッドを使っているかどうか分からないが、広域変数やstaticな変数が無いので関係ない

[fread()==1となる数値](25%)
size_tの宣言がどのようなものか知らないが、例えば
typedef unsigned long size_t;
の場合、fread()==1となるfread()の戻り値は、1以外にも存在する
だたし、sizeof(long)(32bitとか) < sizeof(long long)(64bitとか)とする
例えば、-9223372036854775807がそうだ
size_t s;
s = -9223372036854775807LL;
if ( s == 1 ) { /* true */ }
これで、fread()==1の説明が付くが、fread()!=0を偽にする数値と一致するわけが無い
(s == 1) && (s == 0)なんてことはありえない、『ありえないなんてことは、ありえない』か

[最適化の影響](40%)
アセンブリを出さないと分からないけど、最適化のしすぎで意図しないコードに化けた可能性はある
コンパイラのバグで、unsignedとsignedを論理比較していたとか

[ライブラリのバグ](5%)
fread()にバグがあってどうかなっている

[そもそもIPGET()を複数回呼ぶループがある](5%)
ループ付近の変数で破壊が起きている

47:デフォルトの名無しさん
10/04/13 00:13:32
memset(&u, 0, sizeof(struct utmpx));
の u ってなに?

48:デフォルトの名無しさん
10/04/13 01:44:31
分からん。
rpとfpの違いも分からん

49:デフォルトの名無しさん
10/04/13 08:58:17
>46
ありがとうございます!助かります。
読ませていただいた感じ、[fread()==1となる数値](25%)
が該当するかも、という気がします。
とは言うのも、64bit pa-riscなんですよ。cpuが。

ちょっと見方を変えて、環境に依存してる問題で何か原因が無いか考えて見ます。
現地環境で返り値見れれば早いんですけどね…。

>47
すみません、それ、utです。
fpはrp。さすがにそのまんま乗せるのはちょっと問題あると思ったんで
変数名や関数名ところどころ変えました。
事情は察してください。



50:デフォルトの名無しさん
10/04/13 09:01:57
>>39
あれこれ想像せず、読み込んだ内容を表示するとかして確認すれば?

51:デフォルトの名無しさん
10/04/13 11:51:46
俺の勘だと、実際のソースではmemsetあたりでopenしなおしてるのが原因

52:デフォルトの名無しさん
10/04/13 16:17:56
この板自演しやすくていいな

53:デフォルトの名無しさん
10/04/13 16:24:37
>>49
そういう不可思議な現象は99%コード領域が書きかえられてることが原因だよ
どっかの馬鹿がヘマして未初期化のポインタ使って何か書き込んでる

54:デフォルトの名無しさん
10/04/13 18:40:52
>>53
それリタイヤ寸前のプログラマの発想だよ

55:デフォルトの名無しさん
10/04/13 21:35:49
main.cpp:3: error: ‘::main’ must return ‘int’
なんで、mainの戻り値をvoidにすると怒られるの?
コンパイラはgcc-4.3.4

56:デフォルトの名無しさん
10/04/13 21:39:20
gccの仕様

57:55
10/04/13 21:40:38
>>56
それじゃ、文法的には問題ないの?

58:デフォルトの名無しさん
10/04/13 21:55:15
もちろん

59:デフォルトの名無しさん
10/04/13 21:58:54
>>55
処理系依存。処理系が int main() 前提だったらそのように書くしかない。
main() といえども、スタートアップの呼び出しの前提には逆らえない。

60:55
10/04/13 22:35:29
>>58-59
thx

61:デフォルトの名無しさん
10/04/13 22:40:25
今日マイコンの本立ち読みしたんだがアセンブリで書かなくちゃいけないところもあるらしいな
その本ちょっと欲しかったんだが値段が高くて手か出なかった

62:デフォルトの名無しさん
10/04/14 01:29:13
>>55 (>>56-59)
C++ の仕様。 void にしたかったら main.c にしてみれば?

63:デフォルトの名無しさん
10/04/14 01:45:40
>>62
C++でもvoid main()はありうる。
ありうるだけだけど。

64:デフォルトの名無しさん
10/04/14 02:03:12
>>63
ないよ。

ISO C++ 3.6.1 p2
> This function shall not be overloaded. It shall have a return type of
> type int, but otherwise its type is implementation-defined.

URLリンク(www.kijineko.co.jp)
> 一方、標準C++では、main の返却値の型は int でなければならないことが
> 明記されていますので、・・・

URLリンク(www.parashift.com)
> main() must return int. Not void, not bool, not float. int. Just int,
> nothing but int, only int.

65:デフォルトの名無しさん
10/04/14 05:15:08
>>64
C++にもfreestanding環境があったと思うが。



66:デフォルトの名無しさん
10/04/14 05:50:04
C++はスレチ

67:デフォルトの名無しさん
10/04/14 08:20:23
>>64
ISO C++では、otherwise its type is implementation-defined
と int でない可能性も含んでいますね。

68:デフォルトの名無しさん
10/04/14 08:43:52
>>67
直訳すると
「それ( main 関数)は int の戻り値型を持たなければならない、がそれ以外は型を実装定義とする」
なわけで、この記述では戻り値型が int でない可能性を含んでいない。

69:デフォルトの名無しさん
10/04/14 09:01:15
文法的にはありってことでは

70:デフォルトの名無しさん
10/04/14 09:30:29
ISO C++ 3.6.1 p2
> This function shall not be overloaded. It shall have a return type of
> type int, but otherwise its type is implementation-defined.

直訳
> この関数は多重定義させることはない。その関数はint型の戻り値を持つことになるだろう、
> しかし、それ以外は、戻り値の型は実装者定義である。

意訳
> この関数は多重定義できない。その関数の戻り値はint型であるが、それ以外は、戻り値の型を実装者定義とする。
それ以外のそれってなんだよと思って、原文見ると
ISO/IEC 14882:2003(E)
3.6.1 Main function
2 An implementation shall not predefine the main function. This function shall not be overloaded. It shall
have a return type of type int, but otherwise its type is implementation-defined.
わぁお、とある実装の話かよ
詰まるところ、別の実装では、main()の戻り値は実装者定義としている

ってか、スレ違い

71:デフォルトの名無しさん
10/04/14 09:39:26
そんなおまいらへ。

C/C++の宿題片付けます 135代目
スレリンク(tech板)l50

ここでなぜか一通り議論されてる。

72:デフォルトの名無しさん
10/04/14 10:01:55
>>70
"its type" が「戻り値の型」にねじまがっている。正しくは main の型。

73:デフォルトの名無しさん
10/04/14 10:08:00
関数の型は、その戻り値の型と引数の型(と C++ ではもう少しのおまけ)から成る。

74:デフォルトの名無しさん
10/04/14 11:12:10
>>72
同じだろ

75:デフォルトの名無しさん
10/04/14 12:41:58
int (*)(void) int (*)(int, char**)
に関しては必須で、それ以外は環境依存ということなので、
intにしててだめな事はないんじゃないの

76:デフォルトの名無しさん
10/04/14 12:52:15
>>75
馬鹿は黙ってなさい

77:デフォルトの名無しさん
10/04/14 13:01:02
じゃあ馬鹿でも分かるようにとっとと結論書いてくれよ

78:デフォルトの名無しさん
10/04/14 14:39:02
出てるだろ馬鹿

79:デフォルトの名無しさん
10/04/14 18:18:59
C++厨は速やかに以下のスレへ移動してください
当スレにおいてあなたたちは「役立たず」です

C++相談室 part79
スレリンク(tech板)

C++上級者が集まるスレ
スレリンク(tech板)

80:デフォルトの名無しさん
10/04/14 18:38:57
役立たずに失礼だろ

81:デフォルトの名無しさん
10/04/14 18:46:14
俺は役立たずだがC++厨と一緒にされたくはないわ

82:デフォルトの名無しさん
10/04/14 19:42:27
>>74
「関数の戻り値の型」と「関数の型」は違うだろ。

83:デフォルトの名無しさん
10/04/14 19:54:40
struct timeData{
char second; /* 秒 */
char minute; /* 分 */
char hour; /* 時 */
char weekday; /* 曜日 */
char day; /* 日 */
char month; /* 月 */
char year; /* 年 */
};
static struct timeData time;
とするのと
timeData[7]として配列0?6までそれぞれ秒から年というふうに意味を
与える使い方どっちがいいですかね?あんまり後者のような使い方は
好ましくないのかな?
ちなみに実際時刻をセットする関数getTimeがchar型のポインタになってます。
getTime(&time.second)とするか
getTime(timeData)とするか
これをみると逆に配列にした方がいいのかなって気がします。
(getTime(&time.second)みないに構造体を配列みたいに使ってもいいのか?)

84:あきら
10/04/14 20:04:15
Winsockを使ってPOST送信したいんですけど
送れません・・・・


strcpy(buf,"POST / HTTP/1.1\r\n");
strcat(buf,"Host: ");
strcat(buf,host);
strcat(buf,"\r\n");
strcat(buf,"Content-Length: 117\r\n");
strcat(buf,"Cookie: 0\r\n");
strcat(buf,"User-Agent: MSIE7.0\r\n");
strcat(buf,"REFERER: URLリンク(aqbb.net)");
strcat(buf,"Connection: close\r\n");
strcat(buf,"\r\n");
strcat(buf,"title=ABFA");
strcat(buf,ses);
strcat(buf,"&name=ABFA&mail=a@docomo.ne.jp&comment=ABFA&pass=1234&ses=");
strcat(buf,ses);
strcat(buf,"&cookie=&upfile=&id=test&mode=thread");
strcat(buf,"\r\n");
strcat(buf,"\r\n");

これでレンタルサーバーにアップしてある
PHPで作成した自分の掲示板に投稿しようと
思いましたが送信できていないみたいです。
どうすればいいですか?


85:デフォルトの名無しさん
10/04/14 20:05:55
逆に配列にしたほうがいいのかな、と思った理由がよく分からないや
getTime(&timeData[6]);
getTime(&timeData[0]);
getTime(&time.second);
getTime(&time.year);
getTime(&timeData[TIME_YEAR]);
getTime(&timeData[TIME_SECOND]);

86:デフォルトの名無しさん
10/04/14 20:07:57
>>84
送信できていないのか、送信したが投稿処理がうまくいかなかったのかを切り分ける作業は終わった?

87:デフォルトの名無しさん
10/04/14 20:17:35
>>71
春休みで宿題がなくてひまだったんです。

88:デフォルトの名無しさん
10/04/14 20:18:51
>>82
関数の型は関数の戻り値の型のことだから一緒では?いいかたが違うだけでは?

89:あきら
10/04/14 20:19:21
>>86
切り分ける作業と言うとどんなのですか?

PHPで
if($_POST["mode"] != 'thread')
{
echo'ERROR!!';
exit();
}

というようにやっています。
sendで送信してからすぐにrecvで受信し
表示させたときにPHP側の
ERROR!!の文字が返ってきました。

90:デフォルトの名無しさん
10/04/14 20:30:03
>>89
パケットがとんでるかどうか見れば良かったんだけど、PHPから返事もらってんだね。
なんでPHP側のログ見ないの?

91:デフォルトの名無しさん
10/04/14 20:31:38
ログ見てもしょうがなかった。
$_POSTの中身見てみたら?

92:デフォルトの名無しさん
10/04/14 20:32:09
>>88
int main(void) という関数 main について、
関数の型は int (void) であり、関数の戻り値の型は int である。

typedef int ReturnType;
typedef ReturnType FunctionType(void);
FunctionType main;

93:あきら
10/04/14 20:32:49
>>90
PHP側のログ?
レン鯖だからログとか見れないと思う・・・

ちなみに
GETで送信することはできました。
POSTにしたら送れなくなった・・・

94:デフォルトの名無しさん
10/04/14 20:36:21
>>88
type
return type of type
と二つ書かれてるんだからそこを意識しなよって意図が見えませんかね

95:デフォルトの名無しさん
10/04/14 20:40:58
>>93
sesって何桁なの
content lengthあってんのかね

96:あきら
10/04/14 20:43:30
>>95
5桁です。
titleにも付けてる理由は
タイトル重複規制してるからです。

97:デフォルトの名無しさん
10/04/14 20:45:18
CR付けないといけないのは、大変だな

98:デフォルトの名無しさん
10/04/14 21:04:50
Linux上でCで開発するとき、listやstackやqueueといったデータ構造を提供するライブラリで最もメジャーなものを教えてください。

次の優先順位でお願いします。

(1)ubuntuに標準で入っているもの(glibcには入っていないですよね)
(2)ubuntuのパッケージとして入手可能なもの
(3)最近もメンテされているメジャーなライブラリ(CSTLよりメジャーなものがいいです)

99:デフォルトの名無しさん
10/04/14 21:07:38
>>98
自分で作れ

100:デフォルトの名無しさん
10/04/14 21:39:01
>100
GNOME環境だったら、KDEでも入っていると思うけどGLibとか
GtkでGUIのアプリ作るときに良く使われるから覚えておいて損は無い

CSTLでも別にいいと思うけど、嫌なら自分で作れ、とマジで言いたくなる

101:デフォルトの名無しさん
10/04/14 22:52:11
>>100
> GNOME環境だったら、KDEでも入っていると思うけどGLibとか

これ使えそう。ありがとう。

102:デフォルトの名無しさん
10/04/14 22:59:17
eglibってのもあるんだ。組み込みに使うならこっちの方がいいかな。

103:デフォルトの名無しさん
10/04/14 23:14:50
本来正しく動くプログラムでも、改行文字とか、環境ののせいでセグメンテーションエラーしたりすることはありますか?

104:デフォルトの名無しさん
10/04/14 23:20:33
そんなことを考える前に、そのプログラムが本来間違ってて
たまたまある環境では動作してたに過ぎない可能性を疑いたまえ

105:あきら
10/04/14 23:20:49
誰か
>>84
お願いします。。。

106:デフォルトの名無しさん
10/04/14 23:32:45
メールボム講座するくらいなんだから自分でがんばりたまえとしか

107:デフォルトの名無しさん
10/04/14 23:40:05
>>103
お前がメモリーをハンダ付けした糞ハードウェアとかならあり得るかもな。

108:あきら
10/04/15 00:49:16
>>106
あぁリファラから辿りましたね?
それは知り合いのサイトですよ。

私もPHP使えますけどCの方が好きです。

109:デフォルトの名無しさん
10/04/15 00:53:28
>>84
sendしないと送れないだろ。

110:あきら
10/04/15 01:02:12
>>109
>>89

111:デフォルトの名無しさん
10/04/15 01:05:17
>>84
bufの初めの方をガンガン上書きしてるけどいいの?

112:あきら
10/04/15 01:09:17
>>111
strcatだから連結だと思うのですが・・・

113:デフォルトの名無しさん
10/04/15 02:59:07
long int と int の違いを教えて

114:デフォルトの名無しさん
10/04/15 03:02:49
long int >= int

115:デフォルトの名無しさん
10/04/15 03:08:35
>>114
ありがとう。

116:デフォルトの名無しさん
10/04/15 06:14:10
>>84
Content-Lengthの値は合ってるの?
Content-Typeは指定しなくていいの?


117:デフォルトの名無しさん
10/04/15 07:47:58
>>98
c++ の STL でいいのでは?

118:デフォルトの名無しさん
10/04/15 07:54:31
>>117
よくないから、質問しているんだろ

119:デフォルトの名無しさん
10/04/15 08:02:53
C縛りって面倒だね。

120:デフォルトの名無しさん
10/04/15 11:02:38
C言語で作られたもの ってどこかにまとめられてますかね?
ググってもなかなかでなかった そもそも質問はここでいいのかな;

PS3とかLinux動くのわかるんだけど=C言語で作られたものですかね?
一般にもわかるような物でC言語で動いてる!ってもの何かないでしょうか?

121:デフォルトの名無しさん
10/04/15 11:06:32
>>120
まとめても意味無いと思うんで、たぶんまとめられていることは無いでしょう。
Linuxは間違いなくC言語で作られています。
他にはApacheあたりもCだったような気がします。
「一般にもわかる」というのがどういうことかよくわかりませんが。

122:デフォルトの名無しさん
10/04/15 11:07:26
Linux最新カーネルでもDLして
中を覗いてみろ。
1000万行を超えるのCソース
を拝むことができる筈

123:デフォルトの名無しさん
10/04/15 11:13:26
>>120
Rubyやemacs

124:デフォルトの名無しさん
10/04/15 11:19:25
予想以上のレスありです

C言語勉強し初めて、PC疎い友人に「それって何ができるの?」と聞かれて
Linuxと言ってもわからないだろうし それ以外の物を説明できなかったので…
具体例として「〜がC言語でできてる」って説明したかったのですが理解が足りなかった;

125:デフォルトの名無しさん
10/04/15 12:14:52
Windowsも古いバージョンはCで作ってたような

126:デフォルトの名無しさん
10/04/15 12:52:34
そりゃC++が無いころからあるからな

127:デフォルトの名無しさん
10/04/15 13:04:51
>>124
日本語喋れないと帰化できないのと同じで、
プログラミング言語(或いは環境)を知らないと
プログラムを作ることができない。
何故Cかと言えば、それが普及しているから。
帰化のアナロジーなら国際会議での英語と同じ。

128:あきら
10/04/15 13:27:24
>>84
だ・・・れ・・・か・・・頼む・・・・

129:デフォルトの名無しさん
10/04/15 13:33:58
sprintf(buf,
"POST / HTTP/1.1\r\n"
"Host: %s\r\n"
"Content-Length: 117\r\n"
"Cookie: 0\r\n"
"User-Agent: MSIE7.0\r\n"
"REFERER: URLリンク(aqbb.net)"
"Connection: close\r\n"
"\r\n"
"title=ABFA%s&name=ABFA&mail=a@docomo.ne.jp&comment=ABFA&pass=1234&ses=%s"
"&cookie=&upfile=&id=test&mode=thread\r\n"
"\r\n",
host, ses, ses);


130:デフォルトの名無しさん
10/04/15 13:45:47
ビットについて教えてください。unsigned shortでビット8がたっていたら処理するというプログラムを考えたいのですが、いまいちピンときません。ご教示お願いします。

131:あきら
10/04/15 13:51:13
>>129
ありがとう。。。
でも昨日それに編集して試したけど出来なかったんだ・・・

132:デフォルトの名無しさん
10/04/15 13:55:13
/*
 2進数 0000 0000 1000 0000
16進数 0    0   8   0
*/

if (value & 0x0080) {
  /* すごく立ってる */
}

133:デフォルトの名無しさん
10/04/15 14:04:30
それビット7じゃね?

134:デフォルトの名無しさん
10/04/15 14:05:36
はぁ?

135:デフォルトの名無しさん
10/04/15 14:08:32
>>130
bitを上から数えるか下から数えるか、0オリジンか1オリジンかはケースバイケース。
下から数えて0オリジンなら
if (unsigned_short_value & (1 << 8)) desired_process();

136:デフォルトの名無しさん
10/04/15 14:10:48
if ( foo & 1<<7 )

137:デフォルトの名無しさん
10/04/15 14:20:27
>>131
>129は本質に関係ない文字列処理の指摘だけだろ。
で、PHPで受信した文字列を全部ダンプしてみた?

138:あきら
10/04/15 14:25:00
>>137
if($_POST["mode"] != 'thread')
{
echo'ERROR!!';
}
else
{
/*受取った文字列表示*/
}

PHPだとこんな処理してるんだけど
recvで見てみると
「ERROR!!」が返ってくる・・・・

139:デフォルトの名無しさん
10/04/15 14:49:39
PHP知らんけど、それって「受信した文字列を全部ダンプ」はしてないんじゃないのか?
つーか、Cに関係ないところで躓いているんだろ。WebProg板にでも行けば?

140:あきら
10/04/15 14:56:00
>>139
HTTP/1.1 200 OK
Date: Thu, 15 Apr 2010 05:53:20 GMT
Server: Apache
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

300
<html lang="ja">
<head>
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"><link rel
="stylesheet" href="pc.css" type="text/css"><title>えらー</title>
</head>
<body text="black" bgcolor="white" alink="green" vlink="blue">
<table width="100%"><tr><td bgcolor="skyblue"><div align="center"><font color="b
lack">えらー</font></div></td></tr></table>
ERROR!!
<hr color="skyblue" width="70%" align="center">
<center>-<a href="admin">Aqua Board</a>-</center>
</body>
</html>
0


141:デフォルトの名無しさん
10/04/15 15:19:33
>>140
>139の2行目。

142:デフォルトの名無しさん
10/04/15 15:21:04
ちゃんと送ってちゃんと受け取ってるじゃないか。
サーバがなぜそれを返したかはサーバの都合だからそっち調べたら

143:デフォルトの名無しさん
10/04/15 16:19:31
二重配列に関してよくわかりません。

int a [ 2 ] [ 2 ] = { { 1 , 2 } , { 3 , 4 } } ;
printf ( " %d / %d / %d / %d \n " , a [ 0 ] [ 0 ] , a [ 0 ] [ 1 ] , a [ 1 ] [ 0 ] , a [ 1 ] [ 1 ] ) ;

とした時に 1 / 2 / 3 / 4 となる理由が分かりません。
1 / 3 / 2 / 4 となるような気がするのですが・・・
それは何故かというと、BASICが確かそんな感じだったからです。
なぜBASICと異なるのでしょうか。

よろしくお願いいたします。

144:デフォルトの名無しさん
10/04/15 16:31:33
そう決まってるから

145:デフォルトの名無しさん
10/04/15 16:33:10
>>140
>>91をスルーするから>>137にめぐってくるわけだ。

146:デフォルトの名無しさん
10/04/15 16:48:01
>>143
BASIC は2次元配列だけど、
C言語の場合は2次元配列ではなく、配列の配列なんだよ。
その違いはある。

けど、君が問題にしてるのは初期化時の書式の話であり、
BASICでは定義時に初期化など行えなかったから、比較のしようがないと思うけどな。

具体的にBASICではどうだったのかを書いて欲しいな。

147:デフォルトの名無しさん
10/04/15 17:18:14
>>146
> 具体的にBASICではどうだったのかを書いて欲しいな。

Basicの件は勘違いだったようです。

148:デフォルトの名無しさん
10/04/15 17:20:17
>>146
BASICじゃなくってフォートランだったようです。

URLリンク(docs.hp.com)

149:デフォルトの名無しさん
10/04/15 17:22:22
異なる言語で配列の扱いが違うってだけじゃん
同じ方が両方やるときにわかりやすいとは思うけど、
違ってても別にどうってことはないだろ

150:デフォルトの名無しさん
10/04/15 17:29:05
なんだ、>148のリンク先に詳細に書かれているじゃないか。
Cには[]という演算子はあるから配列の配列は書けるが、そいつは厳密な意味での2次元配列じゃないってこった。

151:デフォルトの名無しさん
10/04/15 17:34:28
>>148
CとFORTRANで配列データを受け渡しをするんであれば、
その違い留意する必要があるけど、そうでないのであれば問題ないはず。

FORTRAN にしてもCの方法では初期化できないよ。
君が何を問題にしているのかがよくわからんよ。

C言語は配列の配列なので、添字の順番は今のでないと成り立たない。
BASICやFORTRANは純粋に多次元配列なので、C言語の順でもよかったんだけど、
最初にそう決めたんだから、今更変わることもないだろう。

152:デフォルトの名無しさん
10/04/15 17:53:40
1 #include <stdio.h>
2
3 int main(void)
4 {
5
6 printf("%s\n", NULL);
7
8 return 0;
9 }

このプログラムがセグメンテーションエラーになるんですけどなぜでしょうか

153:デフォルトの名無しさん
10/04/15 17:55:43
>>152
メモリの0番地をリードしようとするから

154:デフォルトの名無しさん
10/04/15 17:55:47
プログラミングはじめたいんだけどなにDLしたらいいの?
やりたいのはCです。

155:デフォルトの名無しさん
10/04/15 17:58:17
最終的に何が作りたいの?

156:デフォルトの名無しさん
10/04/15 17:59:15
>>154
Visual C++ 2008 Express Edition

157:デフォルトの名無しさん
10/04/15 18:00:33
2010が旬だろw

158:デフォルトの名無しさん
10/04/15 18:01:09
VC勧める人よくいるけど、導入やコード作成の手間考えれば
初学者にはちょっと敷居が高いんじゃないか?

159:デフォルトの名無しさん
10/04/15 18:02:57
VC++も最初に落としたけど、 C言語を始めよう! からが初めやすかった
慣れればVC++で良いけど。エディタはサクラエディタに慣れると他のが使いにくくなった

160:デフォルトの名無しさん
10/04/15 18:04:44
>>153
NULLポインタを渡したら(null)みたいに表示されるものと勘違いしていました. 馬鹿でした

161:デフォルトの名無しさん
10/04/15 18:05:11
ありがとう、とりあえず挙がったの落としてみるよサンクス

162:デフォルトの名無しさん
10/04/15 18:38:08
>>157
まだ英語版しかない

163:デフォルトの名無しさん
10/04/15 20:02:52
ソース見てたんですけど
GPIO.F5 = ~GPIO.F5;の「= ~」ってどうゆう意味ですか?
よろしくお願いします

164:デフォルトの名無しさん
10/04/15 20:08:41
=は代入、~はビット反転

165:デフォルトの名無しさん
10/04/15 20:09:17
>>163
~は論理否定の演算子なので、~GPIO.F5はF5ビットを反転した値になる。
それをGPIO.F5へ代入している。
つまり、F5ビットが今の状態から反転するってこと。

166:デフォルトの名無しさん
10/04/15 20:11:20
>>164 >>165
有難うございました

167:デフォルトの名無しさん
10/04/15 20:55:49
>>165
論理否定と言ったら「!」のことを指す
「~」はビット反転とかビット否定とか1の補数とか

168:デフォルトの名無しさん
10/04/15 21:04:30
パターンマッチ演算子のある言語から来るとぎょっとするかもねぇ

169:デフォルトの名無しさん
10/04/15 21:38:48
配列の長さはどうやって求めるのですか?

170:デフォルトの名無しさん
10/04/15 21:46:09
sizeof

171:169
10/04/15 21:47:00
>>170
thx

172:デフォルトの名無しさん
10/04/15 22:04:54
危険な予感

173:デフォルトの名無しさん
10/04/15 22:07:53
sizeof array / sizeof *array で配列の要素数が求められる

174:デフォルトの名無しさん
10/04/15 22:19:04
1になるんですけど・・・と言ってくるのが目に見えるようだ

175:デフォルトの名無しさん
10/04/15 22:19:34
0もありうる

176:デフォルトの名無しさん
10/04/15 22:21:23
mallocしたポインタで、ポインタのサイズが返ってくるに一票

177:デフォルトの名無しさん
10/04/15 22:28:46
2や4もあるで

178:デフォルトの名無しさん
10/04/15 22:34:39
一つづつ数えろよ

179:デフォルトの名無しさん
10/04/16 00:13:52
#define の ## って何ですか?

180:デフォルトの名無しさん
10/04/16 00:16:00
連接

181:デフォルトの名無しさん
10/04/16 00:18:54
連接ってなんだろう・・・

182:デフォルトの名無しさん
10/04/16 00:37:46
#define cat(a, b) a##b

int func1();
int func2();

int main(){
  cat(func, 1)();  // -> func1();
  cat(func, 2)();  // -> func2();
  return 0;
}

183:デフォルトの名無しさん
10/04/16 08:07:21
>>68
「それ以外」というのは main() がint を返さない場合のことですよね。
すなわち main() の型が実装によっていろいろかわることも許容しているではないでしょうか?

184:デフォルトの名無しさん
10/04/16 08:12:22
>>183
main 関数の型を構成する要素(>>73,92参照)のうち、まず戻り値の型は int であるとし、
それ以外の要素について(つまり引数リストの型などについて)は実装依存であるということ。

185:デフォルトの名無しさん
10/04/16 12:31:24
>>182
そうなんだ。
どうもありがとうございます。

では #defineの#は何ですか?

186:デフォルトの名無しさん
10/04/16 13:02:28
学校卒業したけど、就職できなかったんだね。可哀想に。

187:デフォルトの名無しさん
10/04/16 18:50:00
>>185
#defineの#はディレクティブといふ。

C言語のソースファイルのコードはそのままコンパイラに食わせる訳じゃなくて、
プリプロセスという課程を経てプリプロセッサが吐き出したコードをコンパイラに食わせている。
プリプロセッサに命令を与える(認識させる)文字がディレクティブ(#)。
注意しなきゃいけないのは、マクロ中の#と先頭に付いている#は全く別であるということだ。
ディレクティブとしての#は先頭に付いている。

例えば一番簡単な例が
#include"xxxx.h"
#includeはプリプロセッサにxxxx.hっていうヘッダファイルを読み込んで、
それそのものをコピペする

もし君がgccを使用しているならgcc -Eでコンパイルしてみるといい。
プリプロセス済みのソースコードが画面に吐き出されるハズだ。

命令には以下のようなものがある。
#include,#define,#if(#ifdef)+#else+#endif

#ifの条件判定には式を、#ifdefの場合は予め定義の何かを使う場合が多い。

後他に#pragmaってのがあるがこれは俺は使ったことが無いので分からない。

188:デフォルトの名無しさん
10/04/16 18:56:09
#define の右辺に登場する # 側を聞いているような気配
文字リテラル化する奴だな

#define foo(arg) #arg
foo(hogehoge) → "hogehoge"

189:デフォルトの名無しさん
10/04/16 19:01:34
>>187
コード、コンパイラ、プリプロセッサ、ヘンダファイルってなんですか?

ディレクティブってエクスプローラーで見た時のフォルダのことですよね、それはわかります。
でもC言語との関係がわかりません。

gccでなくpcを使ってます、osはもちろんwindowsです。ですから試せません。

すみませんがよろしくお願いします。

190:デフォルトの名無しさん
10/04/16 19:03:21
>>188
ありがとうございます。

191:デフォルトの名無しさん
10/04/16 19:35:28
>>189
     ,.――-、
     ヽ / ̄ ̄ ̄`ヽ、     勇者トンファーパーマン惨状
      | |  (・)。(・)|
      | |@_,.--、_,>       俺が着たからにはもう色々と駄目だ
      ヽヽ___ノ          
        /:::::::::::::::::l   /77
       /::::::::::i:i:::::::i,../ / | 
       l:::/::::::::i:i:::、:::/ / |  
       l;;ノ:::::::::::::::l l;.,.,.!  |  
        /::::::::::::::::l/ /  冂 
       /:::::::;へ:::::::l~   |ヌ|
      /:::::/´  ヽ:::l   .|ヌ|  
      .〔:::::l     l:::l   凵
      ヽ;;;>     \;;>

192:デフォルトの名無しさん
10/04/16 20:06:08
おもしろいネタだこと

193:デフォルトの名無しさん
10/04/16 20:29:35
#include <stdio.h>
int main(void)
{
long i=0;
for (i=1;i>=0xFFFFFFFFFFFFFFF;i++){}
return 0;
}
(8) : error C2143: 構文エラー : ';' が '型' の前にありません。
(9) : error C2065: 'i' : 定義されていない識別子です。
(9) : error C2065: 'i' : 定義されていない識別子です。
(9) : error C2065: 'i' : 定義されていない識別子です。

どこがおかしいのか分かりません
たすけてくだしあ

194:193
10/04/16 20:33:11

(8)は4行目です

195:デフォルトの名無しさん
10/04/16 20:55:01
>>193
普通に動いたよ。
long int じゃないとだめとかかな?


196:デフォルトの名無しさん
10/04/16 20:59:20
>>193
うちのGCCはWARNINGは出るがコンパイル自体は通ってる。

環境に何か問題あるんじゃまいか。

他にエラーとか、警告とか出てないのか?

197:デフォルトの名無しさん
10/04/16 21:17:41
>>193
うちのコンパイラでもエラーはでないな。
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.

06.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.

/out:06.exe
06.obj


198:デフォルトの名無しさん
10/04/16 21:19:18
>>184
otherwise を「引数リストの型などについて」の意味と解釈した理由を教えていただけませんか?

199:デフォルトの名無しさん
10/04/16 21:27:17
>>193
{
/* 行番号から、ここに何かあると予想 */
long i=0;


200:デフォルトの名無しさん
10/04/16 21:43:23
(4) : error C3872: '0x3000': この文字を識別子で使用することはできません
(5) : error C2143: 構文エラー : ';' が '型' の前にありません。
(6) : error C2065: 'i' : 定義されていない識別子です。
(6) : error C2065: 'i' : 定義されていない識別子です。
(6) : error C2065: 'i' : 定義されていない識別子です。

こうならできたけどなぁ

201:デフォルトの名無しさん
10/04/16 21:48:36
>>187
ほう、ディレクティブっていうのか。
10年C使ってて初めて知ったぜ

202:デフォルトの名無しさん
10/04/16 21:55:43
>>200
何で最初に
(4) : error C3872: '0x3000': この文字を識別子で使用することはできません
これを書かなかったんだ……

何処かに全角文字使ってる。
多分long i=0;の辺り

203:デフォルトの名無しさん
10/04/16 22:03:40
>>200
4-7行目あたりに、他のコード(そこだけなら動く)があるんじゃないか?
で、今度は、それを消した時に、全角文字が残って、
違うエラーがでたんじゃないのか?

204:デフォルトの名無しさん
10/04/16 22:06:28
あ、ちがうちがう。>>200>>193じゃない。
まぎらわしくてすまん。
同じメッセージを出したくて、つい。

205:デフォルトの名無しさん
10/04/16 22:18:35
可能性は∞。

全角文字がある可能性もあるし、人間には見えない文字が紛れ込んでいる可能性だってある。
或いはコンパイラが賢すぎてfor内の条件が1度も満たされない事に気付いてexeを生成するのを拒否してるのかもしれん。

206:デフォルトの名無しさん
10/04/16 22:22:09
>>204
同じメッセージを出したいなら、こんな感じ。

#include <stdio.h>
int main(void)
{
char buf[] = "Hello, world!";

printf( "%s\n", buf );

long j=0;
for (i=1;i>=0xFFFFFFFFFFFFFFF;i++){}
return 0;
}

207:193
10/04/16 22:22:49
すいません
再起動したら直りました

208:デフォルトの名無しさん
10/04/16 22:25:02
Hello worldに書き換えた時に、変な消し方をしてしまった…orz
long j=0; // ×
long i=0; // ○


209:デフォルトの名無しさん
10/04/16 22:29:16
>>206
ああ、その手があったかw

210:デフォルトの名無しさん
10/04/16 22:30:27
>>207
んなアホな…

211:デフォルトの名無しさん
10/04/17 13:17:06
>>187
> 後他に#pragmaってのがあるがこれは俺は使ったことが無いので分からない。

これは何ですか?

212:デフォルトの名無しさん
10/04/17 13:19:25
処理系依存の命令用に用意してあるもの

213:デフォルトの名無しさん
10/04/17 23:47:08
6桁の数字を入力して、その数字の金額の金種を出力するプログラムを作っているのですがうまくいきません
とりあえずここまで作ったのですが…

#include <stdio.h>

int main(void) {
int x[9][2] = {
{ 10000, 0 },{ 5000, 0 },{ 1000, 0 },{ 500, 0 },{ 50, 0 },{ 10, 0 },{ 5, 0 },{ 1, 0 }
} ;
int n,k ;

printf("6桁の数字を入力してください \n");
scanf("%d",&n);

printf("%d円は \n",n);

for( k=0 ; k<9 ; k++ ){
x[k][1] = n/x[k][0] ;
n = n%x[k][0] ;
}

for( k=0 ; k<3 ; k++ ){
printf("%d円札は%d枚 \n", x[k][0],x[k][1] );
}
for( k=3 ; k<9 ; k++ ){
printf("%d円玉は%d枚 \n", x[k][0],x[k][1] );
}

return 0;
}


214:デフォルトの名無しさん
10/04/17 23:50:54
2000円札はいつも忘れられる運命にあるな

215:デフォルトの名無しさん
10/04/17 23:57:42
>>213
っ {100, 0},

216:デフォルトの名無しさん
10/04/18 00:02:44
>>213
つ k<8

217:デフォルトの名無しさん
10/04/18 00:07:22
配列の大きさに対して、紙幣と効果の種類が足りない。
その結果0で割ってるためにエラー。

218:デフォルトの名無しさん
10/04/18 00:12:54
Cってよく高速っていうけどアセンブリほど早いわけじゃないでしょ
なんか中途半端なかんじなんだよね

219:デフォルトの名無しさん
10/04/18 00:14:15
int main(int argc, char **argv) {
  unsigned long  num;
  unsigned char  a, b, c, d, e, f, g, h, i;

  num = strtoul(argv[1], NULL, 0);
  a = num / 10000;
  num %= 10000;
  b = num / 5000;
  num %= 5000;
  c = num / 2000;
  num %= 2000;
  d = num / 1000;
  num %= 1000;
  e = num / 500;
  num %= 500;
  f = num / 100;
  num %= 100;
  g = num / 50;
  num %= 50;
  h = num / 10;
  num %= 10;
  i = num / 5;
  num %= 5;

  fprintf(stdout, "%2u%2u%2u%2u%2u%2u%2u%2u%2u%2u", a, b, c, d, e, f, g, h, i, num);

  return EXIT_SUCCESS;
}


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4989日前に更新/245 KB
担当:undef