C言語を勉強しあおう
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/09/24(月) 11:12:550002デフォルトの名無しさん
2007/09/24(月) 11:19:44main(int argc, char *argv[])
とかいってみる
0003デフォルトの名無しさん
2007/09/24(月) 11:20:460004デフォルトの名無しさん
2007/09/24(月) 12:35:170005デフォルトの名無しさん
2007/09/24(月) 12:36:410006デフォルトの名無しさん
2007/09/24(月) 14:50:220007デフォルトの名無しさん
2007/09/24(月) 15:02:590008デフォルトの名無しさん
2007/09/24(月) 15:58:370009デフォルトの名無しさん
2007/09/24(月) 20:49:05規格読んだこと無いのがバレバレだな
0010デフォルトの名無しさん
2007/09/24(月) 21:19:30って、どうなるの?
0011デフォルトの名無しさん
2007/09/24(月) 21:23:35aの型と値による
0012デフォルトの名無しさん
2007/09/24(月) 21:29:23少なくとも鼻から悪魔が出ることは間違いない・
0013デフォルトの名無しさん
2007/09/25(火) 11:07:40ちょwww間違いないのかw
0014デフォルトの名無しさん
2007/09/25(火) 21:51:10間違いというわけでなく結果が未定義なので処理系依存。
http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
0015デフォルトの名無しさん
2007/09/26(水) 20:57:09いあいあ
「鼻から悪魔」ってのは「結果が未定義なので何が起きてもおかしくない」って意味だろ?
それを「鼻から悪魔が出ることは間違いない」って言っちゃうと
「間違いなく鼻から悪魔が出る」という意味になって「未定義」って意味でなくなっちゃうって意味で笑ったのだけど…
分かりにくかったらスマンカッタ
0016デフォルトの名無しさん
2007/09/26(水) 21:09:340017デフォルトの名無しさん
2007/09/26(水) 21:45:28ってことか。
0018デフォルトの名無しさん
2007/09/27(木) 00:43:55>13を「間違いなのか」って読み間違えて「間違いじゃなくて未定義だよ」ってレスした。
>>14で言いたかったことは>>17みたいな感じ。
壊れた日本語で誤解させてスマソ。
0019デフォルトの名無しさん
2007/10/08(月) 15:49:01printf("%d\n", i);
ji = getchar();
i++;
}while(i <= 5);
このループを回すと、
a ←入力
1
2
d ←入力
3
4
というふうに勝手に二度回ってしまうんですけど、どうしてでしょうか?
コンパイラはgcc4.1.2なんですが。
0020デフォルトの名無しさん
2007/10/08(月) 15:58:430021デフォルトの名無しさん
2007/10/08(月) 16:09:19全部を見るまでもない。getchar()は一文字入力関数なのに
aを入力した段階で'a'と'\n'の二文字を入力してしまっているので
二度目のループに到達してしまう。
回避するには、改行文字を読み捨てるか一行入力単位で処理するか。
0022デフォルトの名無しさん
2007/10/08(月) 16:10:46馬鹿丸出しだな。
0023デフォルトの名無しさん
2007/10/08(月) 16:37:53int a[5],x;があって
scanf("%d",&x);で123と入力したとき
a[0]に1 a[1]に2 a[2]に3
を入れるにはどうすればいいでしょうか
0024デフォルトの名無しさん
2007/10/08(月) 16:47:39a[0] = x / 100;
a[1] = x / 10 % 10;
a[2] = x % 10;
or
scanf("%1d%1d%1d", & a[0], &a[1], &a[2]);
0025デフォルトの名無しさん
2007/10/08(月) 16:50:26しかしそれだと不特定多数の場合使えないので
一般化してもらえないでしょうか?
0026デフォルトの名無しさん
2007/10/08(月) 16:51:06一般化したものも作ってもらえないでしょうか
0027デフォルトの名無しさん
2007/10/08(月) 17:00:17とするなら下位はa[0]に入れるのが自然な気がするが、上位に入れるのでいいのか?
0028デフォルトの名無しさん
2007/10/08(月) 17:04:07#define N 20などとしておきNを要素とします
入力はNを超えない程度にお願いします
良く分からないので上位下位どちらもお願いしてよろしいでしょうか
0029デフォルトの名無しさん
2007/10/08(月) 17:05:08ヒントだけでは何にもできないならこのスレにいる意味がないのでは?
少しくらいはない知恵を絞ってみてから他人を頼りなさいよ。
0030デフォルトの名無しさん
2007/10/08(月) 17:06:42そもそも、一桁ずつ配列に入れたい理由が判らんからなんとも言えんが。
0031デフォルトの名無しさん
2007/10/08(月) 17:08:33それにしたがってコードも書き直さなければいけないので十分一般化されているとはいえません
0032デフォルトの名無しさん
2007/10/08(月) 17:08:34レスありがとうございます。
文字当てゲームを作りたかったのですが、
とりあえずの解決策として、以下のようにしてみました。
003332
2007/10/08(月) 17:10:05#include<stdlib.h>
#include<time.h>
#define BIGSMALL 97
int main(void)
{
char qchar[10];
char ji[256];
int i = 0;
srand((unsigned int)time(NULL));
qchar[0] = (rand() % 25) + BIGSMALL;
printf("%c", qchar[0]);
do{
scanf("%s", ji);
printf("%c\n", ji[0]);
if (ji[0] == qchar[0]){
printf("正解!\n");
return 0;
}else if (ji[0] < qchar[0])
printf("届かない\n");
else if (ji[0] > qchar[0])
printf("行き過ぎ\n");
i++;
}while(i <= 5);
printf("ゲームオーバー\n");
return 0;
}
あまりスマートでない気がしますが、より良い方法はないでしょうか?
003432
2007/10/08(月) 17:11:41テスト中のソースなので、余計なものが入ってます。
ご了承ください。
0035デフォルトの名無しさん
2007/10/08(月) 17:18:41n = strlen(s) - 1;
a = malloc(sizeof(int) * n);
for (i = 0; i < n; i++) *(a + i) = *(s + i) - '0';
free(a);
0036デフォルトの名無しさん
2007/10/08(月) 17:27:010037デフォルトの名無しさん
2007/10/08(月) 17:28:52もうちっと、読解しようとする努力をしてみてもいいんじゃない?
0038デフォルトの名無しさん
2007/10/08(月) 17:47:49>29
つーか、forに値を掛けるって何だ?
0039デフォルトの名無しさん
2007/10/08(月) 18:03:43* は掛け算じゃない
0040デフォルトの名無しさん
2007/10/08(月) 18:10:51↓
a[i]
0041デフォルトの名無しさん
2007/10/09(火) 09:22:59人生初のCプログラムをここに記す
#include <stdio.h>
main()
{
int i;
int a[99];
i = 0 ;
while ((a[i] = getchar()) != '\n')
i++;
a[i] = '\0';
i = 0 ;
while (a[i] != '\0')
putchar(a[i++]);
putchar('\n');
return 0;
}
実行結果
$ a.out
おまんこ
おまんこ
$
0042デフォルトの名無しさん
2007/10/09(火) 09:30:37カレントディレクトリをPATHに入れるのは危険なのでやめた方がいい。
それはいいとして、アナクロな書き方だなぁ。
0043デフォルトの名無しさん
2007/10/09(火) 09:38:47なるほど危険なことしてましたね。
それにしてもUNIXっていいですね。DOSなら暴走ですね
0044デフォルトの名無しさん
2007/10/09(火) 09:46:00PATHにカレントを含めると何が危険なのかというと、例えば/tmpにうっかり(或いは故意に)
lsと言う名前の実行ファイルを置いてしまっているときにcd /tmpしてlsしたときにはまるから。
また、既存プログラムとたまたま同じ名前のプログラムを作ったときにも同じことが言える。
例えば、calというプログラムをつくってしまい、./calではなくcalと実行すると/bin/calが動くわけで。
0045デフォルトの名無しさん
2007/10/09(火) 22:24:37#include <stdlib.h>
typedef struct lst_t {
char chr;
struct lst_t *next;
} lst_t;
lst_t *makelist(char *);
void putlist(lst_t *);
int main(int argc, char *argv[])
{
lst_t *lst;
lst = makelist("\nopurun");
putlist(lst);
return 0;
}
lst_t *makelist(char *str)
{
lst_t *lst = NULL;
if (*str) {
lst = (lst_t *)malloc(sizeof(lst_t));
lst->chr = *str;
lst->next = makelist(str + 1);
}
return lst;
}
void putlist(lst_t *lst)
{
if (!lst) return;
putlist(lst->next);
putchar(lst->chr);
free(lst);
}
0046ワカメ高専
2007/11/27(火) 01:07:10これをラグランジュで求めて結果を出力するプログラムを作れって言われたけどさっぱりでしゅ(c c++)
0047デフォルトの名無しさん
2007/11/27(火) 01:57:51課題丸投げは宿題スレへ
http://pc11.2ch.net/test/read.cgi/tech/1195668114/
0048デフォルトの名無しさん
2007/12/01(土) 19:33:28FFみたいなソフトはどうやって作るんですか?
ゲーム作成を歌ってる書籍に載ってるゲームなんて
他人にゲームとして公開できるレベルではありませんよね
0049デフォルトの名無しさん
2007/12/01(土) 19:41:08まずはそのレベルでも達しないと、さらにその上には行けないと思うよ
0050デフォルトの名無しさん
2007/12/01(土) 20:30:03他人に後悔もできないレベルのゲームが作れない人間がいきなりいいものなんてなかなか作れないよ。
ゲームは画像処理やサウンド制御、データ作成、バランス調整、シナリオ作成、企画などなどプログラム技術
以外の知識や経験、センスも多く必要。
0051デフォルトの名無しさん
2007/12/02(日) 02:13:17低レベルの俺には想像できんな
0052デフォルトの名無しさん
2007/12/03(月) 13:32:04英語始めて一年くらい経ちますけどハリーポッターみたいな長編小説はどうやって書くんですか?
というくらい頓珍漢な質問だね。
0053デフォルトの名無しさん
2007/12/03(月) 23:58:28あんたアフォ?
0054デフォルトの名無しさん
2007/12/04(火) 00:41:190055デフォルトの名無しさん
2007/12/04(火) 02:20:08人間に言われても「なんで?」ってなりそうでうまくたとえられていないような気がする。
0056デフォルトの名無しさん
2007/12/04(火) 06:55:45> ゲーム作成を歌ってる書籍に載ってるゲームなんて
> 他人にゲームとして公開できるレベルではありませんよね
何のゲームかは知らんが、君はその書籍に載っているゲーム
くらいは作れるのかい?
その書籍のソースをコピペするだけなら誰でも出来る。
要は、その書籍からゲームの作り方を学び取り
そこから初めて自分なりのゲームを考え始めるもんだろう
まぁC言語1年って事は、まだまだ先の話だろうけど。
0057デフォルトの名無しさん
2007/12/04(火) 13:01:56>それを英語初めて一年目の人間に言われても「なんで?」
まさにこれだろ。
>それをプログラム初めて一年目の人間に言われても「なんで?」
て事。
0058デフォルトの名無しさん
2007/12/04(火) 21:34:50↓
プログラムのシステムの壁(FCのFF)
↓
越えられないボリュームの壁(SFCのFF)
↓
越えられないマルチメディアの壁(PSのFF)
↓
指をくわえて見てるだけの存在(PS2のFF)
無理です
0059デフォルトの名無しさん
2007/12/06(木) 00:25:44すごくわかりやすいwww
0060デフォルトの名無しさん
2007/12/06(木) 12:43:47ボリュームの壁はきびしい
0061デフォルトの名無しさん
2007/12/06(木) 14:04:020062デフォルトの名無しさん
2007/12/06(木) 21:35:52>プログラムのシステムの壁(FCのFF)
俺、もうこの時点でマルチメディアの壁が越えらんネ。
0063ケンイチ
2007/12/06(木) 22:50:02今、C言語の勉強をしているのですが、どうしても分からないので、分かる方がいましたら教えてもらいたいのですが・・・。
キーボードから文字を入力して(scanf)を使用して、1を押したら「+」が表示され、2を押したら「###」、3を押したら「*****」
と+、#、*を判断して押したキーボードにより結果が変わる仕組みなのですが、さっぱり分かりません。
例えば、3をおすと、
+
###
*****
5を押すと、
+
###
*****
+++++++
#########
と、言うプログラムなのですが・・・。
使用する関数は、if、for、while等です。
分かる方、ぜひ教えてください。
よろしくお願いします。
0064デフォルトの名無しさん
2007/12/06(木) 22:54:01「市販レベルのゲームをめざします。うちはスタッフにもそれなりのレベルを要求しますよ」
みたいな募集がいっぱいあったね。
募集してる当人たちは「総指揮」とか「ディレクター」とか「アドバイザー」とか、実作業は
しないであろう肩書きばっかりなの。
(ゲームデザイナーをやるって言うやつでさえマシに見えるレベル)
0065デフォルトの名無しさん
2007/12/06(木) 23:04:050066デフォルトの名無しさん
2007/12/06(木) 23:40:030067デフォルトの名無しさん
2007/12/07(金) 00:05:34何年もかけてるわけない
そんなにかかったらM取れねーよ
0068デフォルトの名無しさん
2007/12/07(金) 09:33:49そのぐらいの丸投げなら宿題スレの方が早いと思うぜ。
テンプレちゃんと守れば。
丸投げじゃないなら、何が分からんかもうちょい詳しく。
>>64
2chで総指揮なんて、実作業してるメンバーより大変そうなんだがな。
メンバーの作業速度すら分からないのに、
作業項目洗い出して、細分化して、担当振って、予定表出して、
予定とズレたら他の担当分と調整しながら修正修正修正。
そして遅れてるヤツのケツを叩く。
ん?なんか言葉にしたら簡単そうに見えるなww
0069デフォルトの名無しさん
2007/12/07(金) 18:46:33自分の名前で何かすごいものを出してちやほやされたい
などという厨な望みが叶うほど現実世界は甘くない
ということを悟るのが早いか遅いかの違いだけ
漏れにはまだその願望が残っていることを認めよう
0070デフォルトの名無しさん
2007/12/08(土) 01:37:31実作業やるスタッフのほうが大変にきまってるだろ。
そもそも「全職種募集。おれ総指揮」なんて言ってるやつはなんにもできないから、そんなことを言っているん
であって、作業項目の洗い出しとかできるわけない。
(実際、ゲーム作ったことのやつばっかだったし)
さらに言えば、数人程度でやってる作業に、専業の監督なんていらないし。
0071デフォルトの名無しさん
2007/12/08(土) 08:42:22年数十億をポケットマネーで出せる奴なら人も集まるだろう
0072デフォルトの名無しさん
2007/12/08(土) 15:16:24あー、いや。
>そもそも「全職種募集。おれ総指揮」なんて言ってるやつは
>なんにもできないから、そんなことを言っているんであって
めっちゃ同意なんだけど。
言いたかったのは「ちゃんとやる総指揮って、んなに楽なもんじゃないぞ」ってことで。
実際シキリ役居なかったときに1回やったけど、もうやりたく無いわ。
単なるADVだったんだけど、何もノウハウ無いし
ネットで検索しながらADVゲームの作り方を1から勉強して、WBSおこして・・・。
遊びでマジメにやり過ぎたと後悔した。
ちなみにプログラマと兼任だった。
経験上数人でも専業監督は欲しい。
0073デフォルトの名無しさん
2007/12/09(日) 15:15:52うろ覚えだけど
・発起人(管理人)がディレクター、アドバイザーを名乗る(もちろんプログラム未経験)
・自分はなにもできないのに周りのメンバーには高いレベルを要求する。
・「遊びじゃないんで」「本気です」が口癖。
・集まってくるのメンバーが「テスター」「声優」ばかり。
・管理人の仕事(実作業)はブログで夢(壮大な計画)を語ること。
・そのブログも「病気」とか「コンピュータウィルスにやられて・・・」とかで休みがち。
・ペンネームに「月」とか「水」とかがつく。
とかなんとか。忘れたwテキトーに書いたんでみんなも忘れてくれ。
0074デフォルトの名無しさん
2007/12/09(日) 16:17:040075デフォルトの名無しさん
2007/12/09(日) 22:31:140076デフォルトの名無しさん
2007/12/11(火) 16:00:460077デフォルトの名無しさん
2007/12/20(木) 16:45:29名古屋駅近辺でお話しましょう
0078デフォルトの名無しさん
2008/01/07(月) 12:37:00スクエニ辺りは何年も掛かってそうだが
発売延期繰り返したからな、一時期w
0079デフォルトの名無しさん
2008/01/21(月) 20:06:35プロのプログラマでもあまりにレベルが低い人が多すぎます。
そんな人に限って、自分のレベルの低さを自覚していない、、、
本人は構わないかもしれませんが、その下についた新人プログラマは
たまったものではありません。(私が経験しました。)
今になって分かりました。
彼らもまた、理解できていなかったのです。
プログラミング言語の一番の習得の近道はきちんと理解している人にアドバイスをもらうこと。です。
私のC言語に取り組んだ7年間をすべてぶつけたつもりでテキストを作りました。
私の会社の後輩からは、どんなテキストよりもわかりやすかった!や、
今まで教えてくれていた先輩や、テキストたちが、ちゃんと理解できていないことがわかりました。
と、嬉しいコメントをたくさんもらいました。
そしてなにより、彼らの社内での評価がとても高いということが、私の誇りです。
興味がある方はどうか、下のサイトをみてみてください。
http://mori.eco.to/
0080デフォルトの名無しさん
2008/01/21(月) 20:13:45誰か買ってやれよ、んでアップして突っ込み所みんなで探そうぜ。
俺は金ないからパスね。
0081デフォルトの名無しさん
2008/01/21(月) 23:22:10qsort()の実装にmalloc()の使用を認める程度だから買うだけ野暮でしょ。
0082デフォルトの名無しさん
2008/01/22(火) 00:22:06そこは目を疑ったな。
マージソートを想定してるのかね。
普通はクイックソート+O(N^2)ソート(要素数少ない時)な実装にするはずだが。
0083デフォルトの名無しさん
2008/01/22(火) 02:49:520084デフォルトの名無しさん
2008/01/23(水) 00:13:38これを
printf("C言語の
学習");
のように改行しても大丈夫なようにする方法ってありますか?
0085デフォルトの名無しさん
2008/01/23(水) 00:14:50学習");
0086デフォルトの名無しさん
2008/01/23(水) 00:15:21"学習");
0087デフォルトの名無しさん
2008/01/24(木) 12:20:16ちょうどそのことに調べようと思ってた時だった。
サンキュ〜
0088デフォルトの名無しさん
2008/03/23(日) 20:25:01どうですかね。うまくできてますかね。
#include <stdio.h>
#include <stdlib.h>
/*関数roの宣言*/
int r(int si,int tai);
int main(int argc, char *argv[])
{
int ro,si;
int tai;
printf(" ローレル指数を計算します。\n");
printf(" ローレル指数とは\n ");
printf("あなたが痩せているか太っているかを調べる数値です。\n");
while (1){
printf(" \n 身長を入力してください。(cm): ");
scanf("%d",&si);
if (si<0){printf(" error!!\n");break;
}
printf(" \n 体重を入力してください。(kg): ");
scanf("%d",&tai);
if (tai<0){printf(" error!!");}
ro=r(si,tai);
0089デフォルトの名無しさん
2008/03/23(日) 20:31:36l三 r=ミ''‐--‐';二,_ ̄ ,三三三彡彡l_ この感じ・・・・
lミ′  ̄ ー-'" '=ミニ彡彡/‐、ヽ
l;l ,_-‐ 、 __,,.. - 、 彡彡彳、.// zipか・・・・
_______∧,、_‖ `之ヽ、, i l´ _,ィ辷ァ-、、 彡彡'r ノ/_ ______
 ̄ ̄ ̄ ̄ ̄ ̄ ̄'`'` ̄ 1  ̄フ/l l::. ヽこ~ ̄ 彡彳~´/  ̄ ̄ ̄ ̄ ̄ ̄
ヽ ´ :l .l:::. 彡ィ-‐'′
ゝ、 / :. :r-、 彡′
/ ィ:ヘ `ヽ:__,ィ='´ 彡;ヽ、
_,,..-‐'7 /:::::::ヽ _: :_ ヽ ィ´.}::ヽ ヽ、
_,-‐'´ { ヽ:::::::::ヘ `'ー===ー-- ' /ノ /::::::ヘ, ヽー、
0090デフォルトの名無しさん
2008/03/23(日) 22:52:55エラーチェックがそれじゃダメなんじゃないの?
0091デフォルトの名無しさん
2008/03/24(月) 07:27:460092デフォルトの名無しさん
2008/03/24(月) 11:17:56scanf()を生で使うとどの途填まるから、エラーチェックなんて無意味だね。
009388
2008/03/24(月) 16:23:46つづきです。
printf(" \nあなたのローレル指数は%dです。\n",ro);
if (ro>=114&&ro<144){
printf(" \n全国的に見て、平均的な体系です。\n\n");}
if (ro>144&&ro<=154){printf(" \n全国的に見て、太り気味な体系です。\n\n"); }
if (ro>154){printf(" \n全国的に見て、太り過ぎな体系です。\n\n");}
if (ro<114&&ro>=104){printf(" \n全国的に見て、やせ気味な体系です\n\n");}
if (ro<104){printf(" \n全国的に見て、やせ過ぎな体系です。\n\n");} }
system("PAUSE");
return 0;
}
int r(int si,int tai){
int ro;
ro=100*tai/(si*0.1*si*0.1*0.1*si)*100;
return ro;}
0094デフォルトの名無しさん
2008/03/24(月) 17:23:290095デフォルトの名無しさん
2008/03/24(月) 17:41:58しかし、100を掛けたり0.1を何度も掛けたり、なんだこの式。
009688
2008/03/24(月) 18:53:46いや〜
intって、3万まででしたよね。
だから、できないのかなぁ〜なんて思っただけです。
できるんですかね。
0097デフォルトの名無しさん
2008/03/24(月) 19:10:030098デフォルトの名無しさん
2008/03/24(月) 19:29:590099デフォルトの名無しさん
2008/03/24(月) 19:33:41だから、0.1を掛けている段階で(intオンリーで計算しようと言う目論みは)台無しなんだってば。
どうせdoubleで計算するなら素直な式にしておくべき。
010088
2008/03/24(月) 20:34:13なんか、工学社の
やさしいC++っつー本にはそう書いてあるんスよ。
0101デフォルトの名無しさん
2008/03/24(月) 20:36:050102デフォルトの名無しさん
2008/03/25(火) 01:40:09ってなんか微妙な表現だな。
どーせ、構造体に関数が書けるとか書いてあるのだろう。
0103デフォルトの名無しさん
2008/03/25(火) 07:28:50本を持ってないからどういう記述してるのかは知らんが。
010488
2008/03/25(火) 10:27:172003年の本ス。
付録のコンパイラが悪いんかもしらん。
0105デフォルトの名無しさん
2008/03/25(火) 12:13:260106デフォルトの名無しさん
2008/03/25(火) 17:58:11それなら確かに int は 32767 までだな・・・。
0107デフォルトの名無しさん
2008/03/25(火) 23:30:16コンパイラ換えたら今度はintって4バイト固定だと思うんじゃね?
0108デフォルトの名無しさん
2008/04/02(水) 20:49:060109デフォルトの名無しさん
2008/04/02(水) 22:54:150110デフォルトの名無しさん
2008/04/02(水) 22:55:090111デフォルトの名無しさん
2008/04/03(木) 00:23:48ニブルってググったら4bitデータだったみたいだけど、これでいいのかな?
別にintの下4bit使えばいいじゃんとか思うけど、それが嫌ならビットフィールドかな。
0112デフォルトの名無しさん
2008/04/03(木) 07:06:5932767 は最大値の下限であって・・・
0113デフォルトの名無しさん
2008/04/03(木) 08:27:27組み込みならそんなの当たり前なのであって・・・
0114デフォルトの名無しさん
2008/04/03(木) 18:23:000115デフォルトの名無しさん
2008/04/03(木) 23:10:040116デフォルトの名無しさん
2008/11/27(木) 22:53:210117氷魚
2009/01/22(木) 02:45:33#define G Baka()
#else
#define (ここにGは何もしないというのを入れたい)
#endif
↑
もう長く使ってなかったから忘れたんですが
何入れたらいいんでしょうか。
0118デフォルトの名無しさん
2009/01/22(木) 06:23:440120デフォルトの名無しさん
2009/01/22(木) 22:29:280121デフォルトの名無しさん
2009/02/11(水) 16:28:110122デフォルトの名無しさん
2009/02/11(水) 21:06:240123デフォルトの名無しさん
2009/02/12(木) 02:44:060124デフォルトの名無しさん
2009/02/12(木) 13:37:440125デフォルトの名無しさん
2009/02/13(金) 23:47:48((void)0)にしておくとコンマ演算子が使えるというメリットがある。
0126デフォルトの名無しさん
2009/02/13(金) 23:56:580127よろしければ教えてください。
2009/03/05(木) 15:26:38どこの部分の仕様を勉強すればいいでしょう?教えてください。
// 参考:
// http://homepage2.nifty.com/c_lang/
// 猫でもわかるプログラミング 第28章 構造体とポインタ ・ 第33章 メモリの動的確保
#include <stdio.h>
#include <stdlib.h>
struct tpl_address_list { //struct template
long* ptr;
long num;
long ix;
};
void allocst(struct tpl_address_list **pt, long n) {
long i, j, k;
struct tpl_address_list *pl, *pm;
*pt = (struct tpl_address_list *)malloc(n * sizeof(struct tpl_address_list *)); // 確保
printf("%ld malloc\n", *pt); // dbg
if (*pt == NULL) {
printf("allocation failed.\n");
return;
}
for (i = 0; i < n; i++) { // 初期化。値はてきとーです
(*(*pt+i)).ptr = NULL + i;
(*(*pt+i)).num = 0 + 10*i;
(*(*pt+i)).ix = 0 + 100*i;
}
pl = *pt;
pm = *pt;
中略(printfとfor文だけ)
return;
} 以下略。
0128デフォルトの名無しさん
2009/03/05(木) 16:55:360129デフォルトの名無しさん
2009/03/05(木) 20:41:49が怪しい。
0130127です。エラーの状況です。お願いします。
2009/03/06(金) 01:47:15allocst関数よりも後の、mallocの直前までは動いてました。nの値を変えると落ちたり最後までいったり。
以下n=8のときの例。構造体は以下のアドレスになりました。
i .ptr .num .ix
a 0 4077688 4077692 4077696
a 1 4077700 4077704 4077708
a 2 4077712 4077716 4077720
a 3 4077724 4077728 4077732
a 4 4077736 4077740 4077744
a 5 4077748 4077752 4077756
a 6 4077760 4077764 4077768
a 7 4077772 4077776 4077780
初期化のfor文直後に読み出した、上記アドレスの中身がこれ。( i >= 6 は略。設定値通りでした)
i .ptr .num .ix
c 0 0 0 0
c 1 1 =@ 10 =@ 100
c 2 2 20 200
c 3 3 538976288 909588792
c 4 540162359 40 400
c 5 5 50 500
構造体の中身をprintf文で見たところ、書き換わっていってます。(列が多いのは、書式がおかしいのかと思っていろいろ試したため)
i &pl[i].ix (*(*pt+i)).ix (*(pl+i)).ix (*(pm++)).ix pl[i].ix
c 0 4077696 0 0 0 0
c 1 4077708 100 100 100 100
c 2 4077720 200 200 200 200
c 3 4077732 926363700 859190070 809054521 875900985
c 4 4077744 729051178 729051178 729051178 729051178
c 5 4077756 538976288 538976288 538976288 538976288
c 6 4077768 690563883 690563883 690563883 690563883
c 7 4077780 1764646249 1764646249 1764646249 1764646249
0131デフォルトの名無しさん
2009/03/06(金) 01:59:01何を確保してるか説明してみろw
0132127
2009/03/06(金) 02:14:030133デフォルトの名無しさん
2009/03/06(金) 02:23:17int ip, n;
p = malloc(n * sizeof(int));
するだろ?
じゃあ構造体struct tpl_address_listをn個領域確保するにはどう書くべきだ?
0134デフォルトの名無しさん
2009/03/06(金) 02:24:08ipじゃなくて*pな
0135127
2009/03/06(金) 03:42:15〜malloc( n * sizeof(struct tpl_address_list) )ですね。
ポインタのポインタが理解できなくて悩んでたときに
よく考えずに * を増やして回ったんです。
結果、確保した領域の外まで書き込んでいたということですか。
<ポインタのポインタ使うのか〜。mainで渡したポインタのアドレスが
**pt になると。すると、*pt の意味は、、、、あれ、どうなるの??
うーん、まぁ配列はポインタだからsizeofに * 要るよね。
この例でもついてるし。(<-たぶんポインタの配列の確保の例)>
といった具合に混乱しておりました。え?メシマズスレにいそうだって?
おかげさまで無事動くようになりました。皆々様ありがとうございました。
ていうかくだらないミスでごめんなさい
0136デフォルトの名無しさん
2009/05/05(火) 18:40:08system("pause");
で停止しておく方法は有名だと思います。
pauseコマンドを使用せずに、C言語の関数だけで記述できないでしょうか?
ちなみに、
getchar()
だと、[ENTER]を押さないと次にすすまないのが難点です。
0137デフォルトの名無しさん
2009/05/05(火) 20:59:10ENTERを叩かないと次に進まないのはPAUSEも同じだと思うのだが。
0138デフォルトの名無しさん
2009/05/05(火) 22:53:450139136
2009/05/07(木) 14:49:59私の質問の内容があいまいでした。申し訳ございません。
PAUSEだと、ENTERだけでなく、任意のキーで次に進めたと思います。
任意のキーで次に進みたいのですが?
0140デフォルトの名無しさん
2009/05/07(木) 15:28:00標準入力は、通常の端末エミュレータでは改行文字の入力で有効になるから、任意の文字一文字で反応させるのは無理。
つまり、標準関数だけではできないのでなんらかの環境依存する手段が必要になる。
0141デフォルトの名無しさん
2009/05/09(土) 16:21:49>Windowsで、コマンドプロンプトが消えないように
...まぁそれはともかく、コンパイラに何を使っているかに夜けど getch() とか使え内科医?
0142デフォルトの名無しさん
2009/05/12(火) 09:58:50>136は、こう書いている。
>C言語の関数だけで記述できないでしょうか?
これを>140はこう判断しただけだろ。
>標準関数だけではできない
そしてあんたは、getch()を「C言語の関数」と判断したわけだ。
0143デフォルトの名無しさん
2010/01/03(日) 01:55:37下記問題で質問があります。
http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H7b2/g11.html
下から16行目
●if((nen==yyyy)&& (strncmp( shina,scode,8 ) == 0))
ifの条件の後に、実行文がありませんが、何を意味しているのでしょうか?
また、下から7行目
●kstack[wi][wj]/1000
という文?がありますが、
下から19行目の
●for (wi = 0; wi < TMAX; wi++ )
for (wj = 0; wi < HMAX;wj++ ) kstack[wi][wj] = 0;
で、全て「0」を代入しているのに、どうして1000で割れるのでしょうか?
非常に初歩的な質問で、単なる私のとんでもない勘違いかもしれませんが、
よろしくお願いします。
0144デフォルトの名無しさん
2010/01/03(日) 12:25:40問題が間違ってるな。if文の次の行が抜けてる。
ググったら、こんなん出てきた。
ttp://club.pep.ne.jp/~yama.ok/lang/H7Atm2.html
0145143
2010/01/03(日) 13:19:19ありがとうございます!!!!!!!!!!
この問題で年末からずっと悩んで?いました!!!!
本当にありがとうございます!!!!!!
0146デフォルトの名無しさん
2010/01/06(水) 14:26:57まさかとは思うが、0を1000で割れないなんてすっとこどっこいなこと言わないよね?
>143の問題のままでは意味がないのだけれど、>144を見ると問題の消えた一行で
きちんと値を代入しているからちゃんと意味もある。
って、よくよく見たら>144でも本文の方は代入してないよ。
やっぱり情報処理技術者試験を受けようとするのは馬鹿ばっかりだ。
0147デフォルトの名無しさん
2010/01/06(水) 14:36:57>リンクを張られるときにはご一報ください。
>違反行為が発見されたときには当該国の法律にもとずき相応の処置を取らせていただきます。
確かにすげぇ馬鹿だ。
0149デフォルトの名無しさん
2010/01/08(金) 00:44:030150デフォルトの名無しさん
2010/01/08(金) 00:56:58int strlen(char *s)
{
char *p = s;
while (*p != '¥0') {
p++;
}
return p - s;
}
ってのがあったんだけど、sってのは配列sの先頭のアドレスですよね
*pってのはアドレスがpのchar型を指してるポインタだと思うんですが、
なんで代入するときは *p = *s; とか p = s; じゃないんですか?
*pがsの先端のアドレスを指すポインタだと考えても、次の行で*pが実際の配列の中身を比較してるのが理解できないです。
誰か考え方教えてください。
0151デフォルトの名無しさん
2010/01/08(金) 01:04:23char* p;
p=s;
と
char *p=s;
は同じ効果
*pはcharの実態 p[0] と同じ効果
で謎は解決するだろうか
0152デフォルトの名無しさん
2010/01/08(金) 01:10:51ありがとうございます。
0153デフォルトの名無しさん
2010/01/09(土) 14:52:410154デフォルトの名無しさん
2010/01/13(水) 21:39:46>って、よくよく見たら>144でも本文の方は代入してないよ。
してないね。>>145 は何を納得したんだろう。
>やっぱり情報処理技術者試験を受けようとするのは馬鹿ばっかりだ。
件の if にある無駄な括弧とか、スタイルの不統一とか
(>>144 に至っては所謂全角文字すら使用している)
下手糞っぽい雰囲気を醸し出してる。
0155デフォルトの名無しさん
2010/01/14(木) 14:15:13>>144が示したサイトの誤字ぐらいは、すぐに「これは打ち間違いだ」と分かる。
分からないの?
>>143が示したサイトが間違っていたのだから、「これも間違いかな?」と直ぐに普通気がつくはくはず。
分からなかったのか。>>154は。
>>144の示したサイトの間違いっているところは、>>143の示したサイトでは間違っていない。
そんなことも気がつかないの?
そもそも>>146は話の本質に関係ないことを得意げに書いている。
マジで知能指数低い。話の流れが全く理解できていない。
って言うか、問題文が論理的に有りえても、
そんなの試験問題に出るわけないじゃん。
そこまで考えが及ばないの?
0156デフォルトの名無しさん
2010/01/14(木) 14:36:10ここで重要なのは
最初の問題で「一行丸まる抜けていた・・・」ということ。
0157デフォルトの名無しさん
2010/01/14(木) 15:07:350158デフォルトの名無しさん
2010/01/14(木) 15:20:300159デフォルトの名無しさん
2010/01/14(木) 16:02:440160デフォルトの名無しさん
2010/01/15(金) 07:04:54このふたりは何を言っているのだろうか?
最初のサイトで一行丸まる抜けていたことが分かったことにより、
他の小さい間違いは単に「打ち間違いだな」とわかる。
他の者も皆わかって書き込みしている。
それがわからないようなら、本当にC言語知っているのか?アルゴリズムを知っているのか?
それに>>146も>>154も、そもそも論点がずれている。
0161デフォルトの名無しさん
2010/01/15(金) 07:55:42抜けていた一行が最初からあったとしても
大雑把なプログラムの流れがわからないんだよ。
だからあんな発言が出る。
0162デフォルトの名無しさん
2010/02/14(日) 16:38:060163デフォルトの名無しさん
2010/02/14(日) 16:49:140164デフォルトの名無しさん
2010/02/14(日) 16:55:23普通バイナリモードでopenしてランダムアクセスに使う
0165デフォルトの名無しさん
2010/03/01(月) 10:28:21敢えて書こう。
バイナリモードでfopenな。
0166デフォルトの名無しさん
2010/03/11(木) 18:51:450167デフォルトの名無しさん
2010/03/11(木) 21:40:37別ウインドウってことは、すでにウインドウのオープンはできているのか。
0168デフォルトの名無しさん
2010/06/21(月) 19:51:43いったんこちらに移動します
961 :デフォルトの名無しさん :2010/06/18(金) 01:29:00
[1]授業単元:暗号理論(大学専門コース)
[2]問題文(含コード&リンク)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10714.lzh
[3]環境
[3-1] OS:C/C++処理系があれば何でも可
[3-2] コンパイラ:gccに近い処理系が理想
[3-3] 言語:C/C++どちらでも可
[4] 9/15迄(夏休み終了まで)
[5] 難しいそうです。無理しないほうがいいそうです。ただ出来たら
テストの点に無関係に単位をくれるそうです
0169デフォルトの名無しさん
2010/06/21(月) 19:56:07に添付されているサンプルコードを復元した状態はこれ
41 名前:デフォルトの名無しさん[sage] 投稿日:2010/06/18(金) 20:57:47
前にエラー文字列で検索したら、どうもこれに近い。
ttp://www.google.com/codesearch/p#8lz4Axekcxw/fs/buffer.c
あと、prob.txtの引数の間のtabはなんなんだろう。
ソースコードを整形したのかな。
0170デフォルトの名無しさん
2010/06/21(月) 20:02:15なんらかの方法で絞込みを行う必要がある
(一つの単語あたり候補が 1000 あるとき、仮決定しながら次を探索できるのはせいぜい 3 単語が限界)
0171デフォルトの名無しさん
2010/06/21(月) 20:30:09#include<stdio.h>
static unsigned char NextTable[256];
void init(void){
int i;
for(i=0;i<256;i++) NextTable[i]=i;
for(i='a';i<'z';i++) NextTable[i]=i+1;
NextTable[i]='A';
for(i='A';i<'Z';i++) NextTable[i]=i+1;
NextTable[i]='a';
for(i='0';i<'9';i++) NextTable[i]=i+1;
NextTable[i]='0';
}
int encode(unsigned char table[256], int c){
int ret;
ret=table[c];
table[c]=NextTable[ret];
return ret;
}
int main(void){
unsigned char table[256];
int i, c;
init();
for(i=0;i<256;i++) table[i]=i;
while((c=getchar())!=EOF){
if(c=='/') putchar(encode(table, c=getchar()));
putchar(encode(table, c));
}
return 0;
}
0172デフォルトの名無しさん
2010/06/21(月) 20:33:14http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10718.c
0173デフォルトの名無しさん
2010/06/21(月) 20:44:42void CSyukudaiEncDlg::scroll(int id)
{
CEdit * pEdit = (CEdit *)GetDlgItem(id);
int line = pedt->GetLineCount();
int col = pEdit->LineLength(pEdit->LineIndex(line - 1)) - 40;
pEdit->LineScroll(line, col);
}
0174デフォルトの名無しさん
2011/01/25(火) 21:07:41「米ベル研究所特別名誉技師のデニス・リッチー博士(69)と米グーグル社特別技師のケン・トンプソン博士(67)」
毎日jp - 毎日新聞のニュース・情報サイト
http://mainichi.jp/select/science/news/m20110126k0000m040012000c.html
0175デフォルトの名無しさん
2011/05/06(金) 20:22:03.12バイナリファイルの扱い方がいまいちわかりません。
.bmpとかは画像を保存する形式とかなんとか聞いたのですが、
ただ単に数字(数値?)の羅列を記録するには.csvとか.txtじゃないとダメですかね?
0176デフォルトの名無しさん
2011/05/06(金) 20:33:18.50あほう、あほう、かと読める。
0177デフォルトの名無しさん
2011/05/06(金) 20:40:58.96ただ単に数値の羅列を記録するのにバイナリで保存しても別にかまわない
画像はただ単に数値の羅列を記録するだけじゃなくてサイズとか色数とかいろいろ付加情報が必要だから
bmpとかいろいろ形式が定められてるだけ
0178デフォルトの名無しさん
2011/05/06(金) 20:50:14.94えーっと・・・
じゃあただの数値の羅列を記録するファイル形式ってのは・・・?
.bmpじゃダメだよね?
0179デフォルトの名無しさん
2011/05/06(金) 20:51:16.900180デフォルトの名無しさん
2011/05/06(金) 20:52:48.760181デフォルトの名無しさん
2011/05/06(金) 20:58:08.86すでにある拡張子 (.txt とか .csv とか .bmp とか) と同じにするとまぎらわしくなるけど、
まぎらわしいという以外に何か問題があるわけでもないので、好きにしてよい
形式不明の拡張子として .dat とかが使われることもある
0182デフォルトの名無しさん
2011/05/06(金) 20:58:42.50なんかくどくてすいません
ありがとうございました。
0183デフォルトの名無しさん
2011/05/14(土) 03:02:26.85"string"と[string]という配列は同じものと考えておk?
0184デフォルトの名無しさん
2011/05/14(土) 10:05:01.48C言語にそんな文法ありませんよ
0185デフォルトの名無しさん
2011/05/14(土) 15:48:31.07[0]s[1]t[2]r[3]i[4]n[5]g
という無名の配列と同じものと考えて良いのかな?
0186デフォルトの名無しさん
2011/05/14(土) 16:22:58.40最後に '\0' も付く
長さ 7 の char 型の無名の配列
0187uy
2011/05/15(日) 00:42:43.46void main(){
char a[] = "test" ;
char b[4];
b[0] = 'a';
b[1] = 'i';
b[2] = 'u';
b[3] = 'e';
// b[3] = '\0';
printf("a ... %s \n" , a );
printf("b ... %s \n" , b );
}
勝手に \0 はつくから、そんなに気にするレベルじゃない
もし、 この b みたいに 一文字ずつ、文字を入れていくような処理を行う場合は、
最後に \0 をいれないと意味不明なところを読み始めるレベル
0188デフォルトの名無しさん
2011/05/16(月) 10:31:19.45○何が起きてもおかしくないレベル
まぁ、これならありだけど。
printf("b:%.4s\n", b);
0189uy
2011/05/17(火) 00:03:17.64どう考えても同じ意味です本当にありがとうございました
お前友達いないだろ
0190デフォルトの名無しさん
2011/05/17(火) 13:21:59.44自己紹介乙
0191uy
2011/05/17(火) 17:49:26.81#define NULL -1
とかやってそう
日本語の細かい定義までも気にするのは、PGの職業病 病院いけ
0192デフォルトの名無しさん
2011/05/20(金) 17:37:35.77typedef struct _COBJ {
char classname[32];
.
.
void (*msgproc)(int msgid , void * param);
.
.
etc.....
} _COBJ;
なんてクラス化基底ベースを作ってOOPやってんだけど難し過ぎる... UMLがまとまらん 特にクラスマネージャーの位置 orz
ARMのヒープ量は充分なんだけど 頭がパンク...
0193デフォルトの名無しさん
2011/05/21(土) 05:45:00.71素直にC++でやれば?
>>191
言葉の定義の問題じゃないよ。
>188の指摘は次の例と同じこと。
×うゆが暴れるスレ
○うゆも暴れるスレ
0194デフォルトの名無しさん
2011/05/22(日) 12:29:37.54ワイド文字のstrcpyとかって無いの?
こないだワイド文字入りのソース作ったら
いくらやってもコンパイルエラーで・・・
0195デフォルトの名無しさん
2011/05/22(日) 13:55:18.040196デフォルトの名無しさん
2011/05/22(日) 17:33:04.89コンパイルエラーででてきた。
コレいったいなんでしょか?
0197デフォルトの名無しさん
2011/05/22(日) 23:42:50.88エディタの設定を見直して、所謂全角空白は目に見えるようにしよう。
0198デフォルトの名無しさん
2011/05/22(日) 23:48:44.45シーじゃなくてパルルだけど、ここら辺?
http://www.kent-web.com/pubc/jcode/
http://homepage2.nifty.com/k_maeda/code/perl.html
0199デフォルトの名無しさん
2011/05/23(月) 21:16:06.39普通に考えても絶対飛ばされないような一行が動作させると飛ぶ。
こんなのありえるの?
これって自分が悪いの?コンパイラが悪いの?
参考までに
(省略)
fgetws(wsi,800,fc);
while(1){
fgetws(wsg,100,stdin); ←ここ
swprintf(wsh,L"%s\n",wsg);
(省略)
ちなみに二行連続で同じ文書いたら一行だけ動いた。
0200デフォルトの名無しさん
2011/05/23(月) 22:28:47.6599.99% お前が悪い
確保して無い領域に変なもん書き込んだんだろ
0201デフォルトの名無しさん
2011/05/24(火) 18:41:53.64領域は宣言の時点で
wchar_t wsg[200]
ってちゃんとなってました。
もう小生の知能じゃ解析不能だったので
二行書いて一行動けばそれでヨシとしました。
とにかくありがとうございました。
0202デフォルトの名無しさん
2011/05/24(火) 18:58:44.56二回目以降はちゃんと二行動く(苦笑)
それならニ回目以降一行飛ばそうと思ったら
一回目に二行とも飛ばされた(苦笑)
わけがわからないwww
0203デフォルトの名無しさん
2011/05/24(火) 19:03:13.04>>202はこちらのソースのミスだった。
書き直したらしっかり動いた。
騒がせてすまない。
反省している。
0204デフォルトの名無しさん
2011/05/24(火) 19:37:52.96動かすごとに同じ順番で同じ数字が出てくる。
どうすれば・・・??
0205デフォルトの名無しさん
2011/05/24(火) 19:45:22.89真面目に勉強しろよ。おまえら(怒)
0206デフォルトの名無しさん
2011/05/24(火) 19:46:22.19srand(time(NULL));
0207デフォルトの名無しさん
2011/05/25(水) 15:11:04.41for文を使って
1〜100まで足した合計
1〜100までの偶数を足した合計
1〜100までの奇数を足した合計
をfor文ひとつを使ってやれる方法を教えて頂けますか?
宜しくお願いします。
0208デフォルトの名無しさん
2011/05/25(水) 21:12:07.98マルチ乙
0209デフォルトの名無しさん
2011/05/26(木) 01:51:07.11int main() {
int sum=0, even=0, odd=0;
int i;
for (i=1; i<=100; i++) {
sum += i;
if (i % 2 == 0) {
even += i;
} else {
odd += i;
}
}
printf ("sum=%d, even=%d, odd=%d\n", sum, even, odd);
return 0;
}
0210デフォルトの名無しさん
2011/05/27(金) 17:58:25.38int main(){
int sum, even, odd;
for(sum=(100*(100+1))/2,even=((100+1)/2)*((100+1)/2),odd=100/2*(100/2+1);0;);
printf ("sum=%d, even=%d, odd=%d\n", sum, even, odd);
return 0;
}
0211デフォルトの名無しさん
2011/05/28(土) 03:47:31.620212デフォルトの名無しさん
2011/05/28(土) 08:56:27.590213デフォルトの名無しさん
2011/05/28(土) 21:21:21.80これで大抵の事は for 文でできる
0214デフォルトの名無しさん
2011/05/29(日) 20:32:37.820215デフォルトの名無しさん
2011/05/30(月) 11:23:03.93全部条件式じゃないか。
気のきいた解説書1冊ですぐ判る。
0216デフォルトの名無しさん
2011/05/30(月) 23:16:29.51猫でも分かる の本でやってるんだけど
よく分からん。
自分でも何がいけないか分からないし。
0217デフォルトの名無しさん
2011/05/31(火) 10:16:30.84その本の内容は知らぬが
if が判らないってことは i < 10 とかが判らないってことか?
猫なんか使うから……
なんというかifならif(条件)までは分かる。
forならfor(条件)。
ほんと何て言えばいいか分からんけど
全体的にゴチャゴチャしてくるにつれて分からなくなってくるというか・・・。
本の練習問題に「1+2+3+・・・+100」の値を求めるプログラムを、
for文を利用して作ってくださいみたいのがあったんだけど
for(i=1; i<100; i++){ までは書けてそれ以上ができなかった。
あー長くてすまん。とにかくもう分からん。
>>218
猫ってそんなゴミクズなの?
調べてみて結構評価高かったら買ったんだが・・・
0220デフォルトの名無しさん
2011/06/02(木) 01:45:50.20>「1+2+3+・・・+100」の値を求めるプログラム
一行で書けると思ったら、気分的に楽なんじゃないかな
int main() { int r = 0; for(int i = 0; i <= 100; i++) r += i; printf("%d¥n", r); }
"for(i=1; i<100; i++){" だと一回足りないナリ
俺は分かり易くこう書いてみる(関数部分は抜き)
r = 0 ;
for( i = 1 ; i <= 100 ; i ++ )
{
r = r + i ;
}
printf( "%d¥n" , r ) ;
0222デフォルトの名無しさん
2011/07/24(日) 01:01:51.580223デフォルトの名無しさん
2011/07/24(日) 02:34:54.900224デフォルトの名無しさん
2011/08/26(金) 13:56:34.910225デフォルトの名無しさん
2011/08/29(月) 06:20:11.55下記の構文を見つけたのですがどういう意味でしょうか?
手持ちのC言語本には目次にすらないのです
よろしくお願いします
__sfr __at (0x0C) T0L; /* Timer channel 0L */
コメントからタイマチャンネル0Lの何からしいですが、
この記述は何を意味しているのでしょうか?
またこれを利用している側は「T0L=100;」の様に変数扱いをしています
__sfr型という事ですか?いろいろ質問ばかりですみません
0226デフォルトの名無しさん
2011/08/29(月) 10:12:17.810227デフォルトの名無しさん
2011/08/29(月) 10:29:28.10マイコンの型番を書きましょう
周辺機能の番地か何かを指す書き方のような?
0228225
2011/08/30(火) 21:48:45.26直感的にはメモリマップドI/Oを名前付けするのかな?と思ったけど
型とかアドレスの意識をどこで結び付けているのか?知りたかった
多分__at (0x0C)へのI/OをT0Lと言う名前で出来るようになる?のかと思ったが__sfrって?って事で
20年以上前、クロスコンパイラ開発してた頃K&Rの仕様書では習わなかった
あの当時だと「(unsigned char *)(0x0C) = 0x00;」みたいな書き方をしてと現場には話した気がする
今はもっと良い(スマートな)書き方があるのか?と期待しての質問でした
久しぶりのC言語だったので立ち寄ってみました
場違いなのかも知れないのでこれにて
申し訳ありませんでした
0229デフォルトの名無しさん
2011/09/19(月) 23:22:03.92(例えば malloc()で割り当てられる連続長?の最大サイズは 物理メモリ量とOSの実装 に依存しながらも
stdint.h に SIZE_MAX として定義されてますが、こんな感じでどこかに)
64bit linuxで下記のようなコードを試しに書いたら core dumped しました
getrlimit(RLIMIT_STACK, &rlim); // STACK=[8388608]byte
char a[8380000]; // core dumped. [8370000]は実行可能でした
rlimitで制限されてるんでしょうか?
0230デフォルトの名無しさん
2011/10/14(金) 07:57:07.58C前提の話をすると unsigned char hoge[10]; の配列数はコンパイル時のsizeofでしかわからないはず。
普通(汎用的)に扱いたいならどっかに int hogehoge=sizeof(hoge);としておくしかないと思う
ちと危険なやり方でhoge変数の前後でmaehogeとatohogeを宣言してアドレス空間の差を…危険すぎるw
変数のタイプによってはリンカーはリロケートしてしまう可能性もあるし
それを回避する為に構造体を持ち出して…とか本末転倒なのでhogehoge式にしておくのが無難
コンパイラ展開規約ではバイト列に対する長さを保持する展開を強制されるリファレンスはないと思った
一部特殊なコードジェネレータがそれが無いと困るケースで特異的にあるはず
でもそんな石使ったことないから知らない
0231デフォルトの名無しさん
2011/10/14(金) 14:19:24.10しかし質問意図が伝わらなかったようで申し訳ないです
質問の意図は
「ある環境の自動変数の最大サイズの配列宣言を 環境非依存にポータブルに記述するにはどうすれば良いのですか?」です
ここでいう環境はUnix Like OS限定と考えてください
char a[10]のような小さなサイズの話ではなく環境で許された最大値ギリギリを使い切りたい場合の話です
"コンパイラ展開規約"?という用語とリファレンスという語が指すものがわからなかったので確認なのですが
> コンパイラ展開規約ではバイト列に対する長さを保持する展開を強制されるリファレンスはないと思った
この文章の意味は
「バイト列に対する最大長を保持するマクロは定義されていない(と思う)」という理解でよろしいですか?
0232デフォルトの名無しさん
2011/10/14(金) 16:02:29.89おお、これは失敬。確保領域の最大値が知りたいのか
自動変数でしかも配列を有限数で宣言する上限と言う事でおk?
だとすればコンパイラの仕様次第としか答えられない。コンパイラは何を使うの?Linuxでgccって事?
一般に自動変数の場合スタック配置される可能性が高い(インプリメントの自由度があり絶対ではない)
そしてgccに限定すると-Gオプションの影響をうけるがこれも機種(CPUやメモリ管理)依存であり、答えがぶれる
C言語では規定できないから厳密な話をするのであればUnix/Linux板か言語として記述で縛るしかないと思う
厳密・忠実なコンパイラインプリメントから言えば添え字は無制限であり、コンパイラ開発者が決めるべきである
が、ANSIが言うには90版は32767、99版は65535だったはず。<int基準で作られていたと記憶
コンパイラ規約(古く私などはカーニハン&リッチの物を基準にコンパイラ開発をした)は常に変動があるので
やはり実行する環境の下で影響の受ける話はするべきだと思う、もう少し環境を限定してもらわないと…
それでもC言語では限定しないし、コンパイルエラーなり実行時エラーなりが出る可能性もある。
後は「特定されている」コンパイラの規約に則してもらうしかない
コンパイラが明示されていないのでわからないし、明示されたら専用のスレで聞けと答えが来ると思うよ?>C汎用の話じゃないし
0233デフォルトの名無しさん
2011/10/14(金) 16:06:55.95これどういう意味?
ポインタを宣言してmallocしちゃダメなの?
mallocの最大値は使うコンパイラのmalloc関数の説明を見てください。最大値が書かれています。
普通に答えるならこうだけど不確定な質問でなんか答え辛い
使うコンパイラやCPU/OSを限定(最低限複数でも種類の列記)は出来ない汎用な話なのですか?
C言語自体は殆ど制約がなく、実装を決定する開発者がその辺決める事が多いのです。
何せ世にゴマンとあるCPUやOSをフルカバーできる程には自由ではないのですよ
0234デフォルトの名無しさん
2011/10/15(土) 14:13:32.45> ポインタを宣言してmallocしちゃダメなの?
> mallocの最大値は使うコンパイラのmalloc関数の説明を見てください。最大値が書かれています。
この部分は>>229のレスを読んでください。 mallocについては"stdint.h に SIZE_MAX として定義されている"と明記しています
つまり「mallocで書けるけど敢えて自動変数で宣言しとくなら最大値は?」です
> まだ質問とぶれてるとすれば「ポータブルな配列宣言」の部分かな?
> これどういう意味?
例としてSIZE_MAXを示してます、ですから「どっかにマクロ定義されてないんですか?」と考えてください
> C言語自体は殆ど制約がなく、実装を決定する開発者がその辺決める事が多いのです。
> 何せ世にゴマンとあるCPUやOSをフルカバーできる程には自由ではないのですよ
このスレはK&RにあるBNFのようなCのsyntaxについて語らうスレなんですか?でしたら書くべきスレを間違ったようですいません
0235デフォルトの名無しさん
2011/10/15(土) 15:16:04.71Cにはdefineマクロという機能がありますから233さんが説明の中でコンパイラ規約
について言及している意味が理解できません。仰るような"環境依存で変わるもの"については
特にそのなかでも汎用的であるものについては マクロで定義された値の部分で環境依存を吸収していると認識いています。
例えば現在利用中の環境ではSIZE_MAX(http://en.wikipedia.org/wiki/Stdint.h)について
/* Limit of `size_t' type. */↲
# if __WORDSIZE == 64↲
# define SIZE_MAX (18446744073709551615UL)↲
# else↲
# define SIZE_MAX (4294967295U)↲
# endif↲
64bit環境ならば 18446744073709551615UL、32bit環境ならば 4294967295U
とここでbit幅の違いによる差を吸収しています。このお陰でSIZE_MAXを使う場合において
言語利用者はSIZE_MAXの具体値を意識する必要から開放されています
ですから>>233さんが>>230,232-233の環境依存で変化するものについての説明の中で
言語仕様(失礼、コンパイラ規約を"言語仕様"という語に読み替えました)について言及している意図が理解できません
0236デフォルトの名無しさん
2011/10/15(土) 19:32:09.21だからその実装(ヘッダの定義)も実装者の自由なんだってば。。。
コンパイラを規定しない限りその保証はないって言ってるの
で、どのコンパイラなの?その専用スレで聞いてくれ
その上でもう一度聞くけど「何故そういうことをするの?」
0237デフォルトの名無しさん
2011/10/15(土) 19:34:41.46自分でdefineきればいいじゃない?
コーディングに関してあるともないともいえないルールを聞かれて答えろってあふぉか
0238デフォルトの名無しさん
2011/10/16(日) 03:49:48.13これって要するに size_t 型の最大値を示しているのであって、自動変数の
最大サイズとは全く関係ないのでは?
大抵のコンパイラはスタックサイズをコンパイル時に指定できるけど、この
サイズを取得する汎用の方法は無いんじゃない?
というか、俺は汎用で無いやり方すら知らない
0239デフォルトの名無しさん
2011/10/16(日) 10:59:11.10void *malloc(size_t size)で割り当てられる連続長の最大サイズを例示しました。そして
> stdint.h に SIZE_MAX として定義されてますが、こんな感じでどこかに
と自動変数のサイズ制限について質問させて頂いた訳です。この質問 どうもマクロは定義されてないようなので諦めます
0240デフォルトの名無しさん
2011/10/16(日) 11:26:05.47> だからその実装(ヘッダの定義)も実装者の自由なんだ
始めからこの記述ならば理解できました。ヘッダファイルはライブラリ記述者がつくったものですからね
>>237
「解らない」と答えるために態々コンパイラ実装者だと自称したりその割には使う用語がおかしかったり
回答に一つも具体的な例示がなく口述の自然言語で抽象化したことをナッガナガと書いてたり
> あふぉか
挙句の果てに去り際に恥ずかしい捨て台詞を吐くようなカス(失礼)は無視するよ(^o^)ノ
0241 忍法帖【Lv=21,xxxPT】
2011/10/17(月) 11:42:04.350242デフォルトの名無しさん
2011/10/17(月) 12:08:40.24偏ってるけど
0243デフォルトの名無しさん
2011/10/18(火) 20:20:24.16そんな暇があったら、サンプルをちょっとずつ変更して
コンパイルして実行
0244デフォルトの名無しさん
2012/01/06(金) 01:39:10.900245デフォルトの名無しさん
2012/01/06(金) 01:58:14.77int main()
{
printf("93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000\n");
return 0;
}
0246デフォルトの名無しさん
2012/01/06(金) 11:35:46.25#include <stdio.h>
#include <math.h>
int main()
{
printf("%g\n", tgamma(100 + 1));
return 0;
}
0247デフォルトの名無しさん
2012/01/15(日) 10:08:36.17なお、ほとんどの場合 a=bのみが実行されます。(-10する事はかなり少ない)
if( 条件)
a=b;
else
a=b-10;
と
a=b;
if(条件)
a=a-10;
0248デフォルトの名無しさん
2012/01/16(月) 09:40:43.06そのまえに、上は条件成立時にa=bだが、下は条件非成立時にa=bな件。
0249デフォルトの名無しさん
2012/01/16(月) 11:27:44.06今時の環境で、その速度差が問題になるようなことはまず有り得ない。
意味的に判り易い方にすればいい。
速度差が問題になったなら、計測してみるしか。
0250247
2012/01/22(日) 22:12:05.45ありがとうございました。
0251デフォルトの名無しさん
2012/02/14(火) 16:16:05.18明解Cの初級編でも終えたら後は実践と本で補うならポインタ
それ以上(オブジェクト指向云々、多言語)はそれぞれの目指す道で分かれるでしょう
0252優しい名無しさん
2012/04/07(土) 10:02:09.08http://codepad.org/jp7DPTAi
■ このスレッドは過去ログ倉庫に格納されています