トップページ⇒tech
1001コメント242KB

C言語なら俺に聞け! Part 88

レス数が1000を超えています。これ以上書き込みはできません。
0001main(void)NGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

各種リンク、関連スレは>>2-13あたり

C言語なら俺に聞け! Part 87
http://pc5.2ch.net/test/read.cgi/tech/1090654469
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002デフォルトの名無しさんNGNG
>>1
初めてのCってなんですか?
0003デフォルトの名無しさんNGNG
>>2
Cの解説書だよ。
0004デフォルトの名無しさんNGNG
>>2
赤裸々な体験を綴った往年の名著
0005デフォルトの名無しさんNGNG
赤裸々な性体験ですか?興味あります。
0006デフォルトの名無しさんNGNG
スレ勃て直すか?
0007デフォルトの名無しさんNGNG
やりすぎると削除の憂き目を、
えーと、憂き目を得るだっけ?
0008デフォルトの名無しさんNGNG
憂き目に遭う、だっけなぁ
0009デフォルトの名無しさんNGNG
scanf達人の漏れに言わせれば、憂き目を見る、だぜ。
0010デフォルトの名無しさんNGNG
gets達人の漏れに言わせれば、憂き目には憂き目を、だぜ。
0011デフォルトの名無しさんNGNG
Java達人の漏れに言わせれば、憂き目はぬるぽ、だぜ。
0012デフォルトの名無しさんNGNG
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__∧∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>11
0013デフォルトの名無しさんNGNG
void reverse(char *s)
{
  int c, i, j;

  for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {
    c = s[i];
    s[i] = s[j];
    s[j] = c;
  }
}
void itoa(int n, char *s)
{
  int i, sign;

  if ((sign = n) < 0)
    n = -n;
  i = 0;
  do {
    s[i++] = n % 10 + '0';
  } while (( n /= 10 ) > 0);

  if (sign < 0)
    s[i++] = '-';
  s[i] = '\0';
  reverse(s);
}
0014デフォルトの名無しさんNGNG
NULLぽ
0015デフォルトの名無しさんNGNG
>>15
誤爆?
0016デフォルトの名無しさんNGNG
>>16
プ
0017デフォルトの名無しさんNGNG
「猫でも解る」のc言語編の丁半ゲーム
http://www.kumei.ne.jp/c_lang/intro/no_24.htm

long motokin;
if (motokin <= 0L)
の 「0L」 は一体どういう意味があるのでしょうか? 
(motokin <= 0) でも良いと思うのですが。よくわかりません
0018デフォルトの名無しさんNGNG
motokinと0を同じ土俵(long値)で比較することを示している
0019デフォルトの名無しさんNGNG
>>18
あぁ、なるほど、早いレスありがとうございます。
0020デフォルトの名無しさんNGNG
getsではなくfgetsを使え〜
0021デフォルトの名無しさんNGNG
>>17
ただし、この場合不要、付けない方が良いから真似しないように。
0022デフォルトの名無しさんNGNG
つけない方が良い?
つけなくても良いじゃないのか
0023デフォルトの名無しさんNGNG
ママにも言われた事ないのに_______
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__∧∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>14
0024デフォルトの名無しさんNGNG
scanfを使った書き方が分かりません。
教えてください。
・数値を一つ入力してそれを表示する。書式は"n=数字\n"
・数値以外のものが入力された場合
  ・"quit"が入力されたら終了する。
  ・それ以外の文字列の場合はエラーとその文字列を表示する。
・終了しなかった場合は最初に戻る。
0025デフォルトの名無しさんNGNG
>>24
http://pc5.2ch.net/test/read.cgi/tech/1090654469/9
0026デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1090654469/10-15
0027デフォルトの名無しさんNGNG
模範解答はコピペしないの?
もしかして誰も応えられないとかw
0028デフォルトの名無しさんNGNG
ワンパターンだな。
0029デフォルトの名無しさんNGNG
一般的に*printfや*scanfの戻り値は検査されているのでしょうか?
0030デフォルトの名無しさんNGNG
>>29
printfの戻り値は捨てるのが普通。scanfはそれ以前に使わないのが普通。
あと、printfもscanfも戻り値はポインタ型じゃないから * は付けない。
0031デフォルトの名無しさんNGNG
>>30
printf だと使わないけど、sprintf だと結構使う罠
0032デフォルトの名無しさんNGNG
>>30
その*はポインタの意味として使ってるんじゃないべ
0033デフォルトの名無しさんNGNG
どんな意味だよ。
003432じゃないがNGNG
>>33
多分ワイルドカード
0035デフォルトの名無しさんNGNG
はぁ、さいですか。
0036デフォルトの名無しさんNGNG
printf fprintf sprintf snprintf vprintf vfprintf vsprintf vsnprintf等
って書くのもめんどいでしょう
0037デフォルトの名無しさんNGNG
そういう時はな、printf、fprintf等、とか言っときゃいいんだよお嬢ちゃん。
0038デフォルトの名無しさんNGNG
うんちゃら系で良いじゃん。
0039デフォルトの名無しさんNGNG
ほげ系
0040デフォルトの名無しさんNGNG
>>33
(*printf)("Hello, Warld.");
0041デフォルトの名無しさんNGNG
(void)printf(...
って書けやぼけ
0042デフォルトの名無しさんNGNG
>>41
int i;
じゃなくて、
auto int i;
と書く人ですか?
0043デフォルトの名無しさんNGNG
auto signed int i;

だな
0044デフォルトの名無しさんNGNG
str[5];
fgets(str, sizeof str, stdin);

if (str[0]) printf("%s", str);

これでstrに0だけを入れてもprintfが実行されてしまいます。
str[0]が0だったら偽だと思うんですけど。
str[0]!=0としてみましたがやはりprintfが実行されてしまいました。
なぜなんですか?
0045デフォルトの名無しさんNGNG
変な改行は気にしないで下さい
0046デフォルトの名無しさんNGNG
0と'0'は違うんだが
0047デフォルトの名無しさんNGNG
>>44
いや、 str[0] != 0 とかやっても変わんないから
0048デフォルトの名無しさんNGNG
>>44
君はC使うのにむいてないから
早く他のツールつかった方がいいよ
0049デフォルトの名無しさんNGNG
論理演算はCに限らず必要。
がんばれ。
0050デフォルトの名無しさんNGNG
混じれ酢すると
fgets で 0 をキー入力した場合、(UNIX系なら)
str[0] = '0' (= 0x30)
str[1] = '\n' (= 0x0A)
str[2] = '\0' (= 0)
0051ビル・ジョブスNGNG
>>44
NUMLOCKしてなかったとか特殊なオチは勘弁してくれよな。
ところで、printf()の結果も書いてくれよ。
0052デフォルトの名無しさんNGNG
>>51
NUMLOCK しててもだめだろ?
str[0] != 0 なんだから。

>>44
if (str[2]) printf("%s", str);
にしる。
0053デフォルトの名無しさんNGNG
右辺値の取り得る最大の値(計算途中も含む)は、処理系の持つ最も大きい型の最大値(この例では一応unsigned longに)なんでしょうか
(というか、計算途中の事が知りたい)
例えば、
a= (b+1)%100;
b=ULONG_MAXでunsigned long型とすると
1. b+1を計算して0になる
2. b+1を計算してULONG_MAX+1の値になる

で、試してみたら1番の結果になりました。
計算途中は処理系限界最大値を超えてるけど、左辺に代入する時は
左辺の型の最大値を下回ってるっていう時、皆さんはどうします?
0054デフォルトの名無しさんNGNG
string.hよりも使いやすい文字列操作ライブラリはありますか?
Javaの様にまではいかないまでも長さチェックなどの機能ぐらいはほしいです。
0055デフォルトの名無しさんNGNG
>>54
それ以上を求めるならC++に行くしかないね。
0056デフォルトの名無しさんNGNG
>>54
探せば幾らでもあるし、自分で作ってもいいし、
それらすら出来ないようなら、>>55 のように
すればいい。
0057デフォルトの名無しさんNGNG
>探せば幾らでもあるし
例えば?
0058デフォルトの名無しさんNGNG
>>57
http://www.google.co.jp/search?q=%E6%96%87%E5%AD%97%E5%88%97%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&ie=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
http://www.google.com/search?hl=en&ie=UTF-8&q=String+Library&btnG=Google+Search
0059デフォルトの名無しさんNGNG
知らないならだまっときゃいいのに
0060デフォルトの名無しさんNGNG
>>58
それは探したとは言わん。単に検索結果を表示しただけ。
そのくらいなら誰にでもできる。
本当に、幾らでもあったのか?
実は調べてないだろ。
0061デフォルトの名無しさんNGNG
誰も探したなんて言ってねーじゃん
0062デフォルトの名無しさんNGNG
>>53
a = b % 100 + 1;

0063デフォルトの名無しさんNGNG
>>60
http://www.google.com/search?hl=en&ie=UTF-8&q=String+Library&btnG=Google+Search

のトップ: http://bstring.sourceforge.net/
2番目: http://www.and.org/vstr/comparison.html

・・・これ以上、何をしろと?
0064デフォルトの名無しさんNGNG
>>53
オペランドのうち大きな方の型。
0065デフォルトの名無しさんNGNG
>>63
自分で使ってもいないものを他人に勧めるなよ。アホか
0066デフォルトの名無しさんNGNG
>>65
http://www.and.org/vstr/comparison.html
"String library comparison" って、
なんて書いてあるか、読める?
0067デフォルトの名無しさんNGNG
>>66
お前が何も知らないのは分かったからもう失せろよ。ボケが
0068デフォルトの名無しさんNGNG
67 名前:デフォルトの名無しさん[sage] 投稿日:04/08/05 00:30
>>66
お前が何も知らないのは分かったからもう失せろよ。ボケが

↑面白いw
0069デフォルトの名無しさんNGNG
配列同士の乗算はポインタ演算の方が早いんでしょうか?
0070デフォルトの名無しさんNGNG
ポインタだからって早いことは何一つ無い。
0071デフォルトの名無しさんNGNG
>>53
a= (unsigned long)((longlong)b+(longlong)1)%(longlong)100;
0072デフォルトの名無しさんNGNG
括弧が足りなかった。スマソ
a= (unsigned long)(((longlong)b+(longlong)1)%(longlong)100);
0073デフォルトの名無しさんNGNG
>>62
それをしたいなら厳密にはこうするべき。
a = (b % 100 + 1) % 100;
0074デフォルトの名無しさんNGNG
>>69
配列同士の乗算っていうと内積とか外積の計算をするってことか?
0075デフォルトの名無しさんNGNG
>>53
オーバーフローしたら結果はsignedなら不定。unsignedなら不定ではないが
正しい結果にはならない。
上回らないように計算するか、doubleを使う。素人はfloat使うな。
0076デフォルトの名無しさんNGNG
↑素人
0077デフォルトの名無しさんNGNG
float
↑フロート
0078デフォルトの名無しさんNGNG
質問するな
回答するな
議論するな
0079デフォルトの名無しさんNGNG
↑知的障害
0080デフォルトの名無しさんNGNG
↑恥的生涯
0081デフォルトの名無しさんNGNG
↓おいなりさん
0082デフォルトの名無しさんNGNG
(´-ω-`)
0083デフォルトの名無しさんNGNG
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/
Visual C++ Developer Center: Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/

【ライセンスや機能などに問題あり】
Microsoft C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
0084デフォルトの名無しさんNGNG
遅れてきたテンプレ乙
0085デフォルトの名無しさんNGNG
意見を聞かせて。

-----
char *buf;
buf = (char *)malloc(sizeof(char) * BUFSIZE);
-----
っていうコーディングは異常? (sizeof(char)あたり)
仕事で書いてるものじゃないから、好きにやればいいのだろうけど、
一般的にはどうなのかな、と。

例えば、これがintだと
-----
int *intarray;
intarray = (int *)malloc(sizeof(int) * ARRAY_SIZE);
-----
って書くのは普通だと思うんだけど、charの時だけsizeofを省略するのが
嫌だなと思うんだよね。
0086デフォルトの名無しさんNGNG
charの大きさは1byte、mallocの引数は確保するメモリブロックのbyte数
だからってどうしろという規則は無いんだから、勝手にすれ
0087デフォルトの名無しさんNGNG
素直にマクロでも作っとけ
0088デフォルトの名無しさんNGNG
>>85
そういうことで迷わないよう、次からはtchar.hを組み込んで、
_TCHAR buf;
buf = malloc(sizeof (_TCHAR) * ARRAY_SIZE);
ただし非標準という罠。
0089デフォルトの名無しさんNGNG
double (*hage)[10];
↑
これはどういった宣言なんですか?
double *hage[10];
とは違いますか?
0090デフォルトの名無しさんNGNG
>>89
↑:『double 型の要素数 10 の配列』へのポインタ
↓:『double 型のポインタ』を 10 こ格納する配列
0091デフォルトの名無しさんNGNG
double (*hoge)[10];
double *(hoge[10]);
009289NGNG
『double 型の要素数 10 の配列』へのポインタ
とは、具体的にどう使うのでしょうか?

double c[10];
double (*hage)[10];
hage = c;

だと3行目でエラーが出ます・・・
0093デフォルトの名無しさんNGNG
テンプレ
 エラーが出ますだけじゃなく、エラーメッセージくらい書け
009490NGNG
>>92
hage = &c;
009589NGNG
&c ですか・・・なんだか混乱してきましたよ><
確かにコンパイル通りました。
&cって一体何を示しているのですか?
アドレスのアドレスって事ですか?

009690NGNG
>>95
そう
ちなみに、c をアドレスだと思うより配列だと思った方が、この場合は分かりやすい
アドレス演算子が & で c が配列なら、配列 c のアドレスは &c
009789NGNG
なんとなく分かってきました。
最後に教えてください。
『double 型の要素数 10 の配列』へのポインタ の要素数2の配列
の使用例はこんな感じで合ってますか?

double a[10], b[10];
double (*hage[2])[10];

hage[0] = &a;
hage[1] = &b;

(*hage[0])[9] = 4.2;
0098デフォルトの名無しさんNGNG
>>97
gcc で確かめた
こんなかんじであってます
0099デフォルトの名無しさんNGNG
>>97
これもできる。
double a[10], b[10];
double *hage[2];
hage[0] = a;
hage[1] = b;
0100100NGNG
おくちにひゃっく
0101デフォルトの名無しさんNGNG
したのおくちにニャンニャンしたいでつ
010289NGNG
ありがとうございました。精進いたしますです。
0103デフォルトの名無しさんNGNG
そんな書き方が必要になることは
ない
0104ガンバル初心者! ボクにも出来た!NGNG
#include <stdio.h>
#include <string.h>
int main(void){
int roop;
char ask[50];
roop = 0 ;
while ( roop == 0 ){
puts("Yes or No ?");
gets( ask );
if ( strcmp( ask, "yes\0") == 0 ){roop++ ;
}else if ( strcmp( ask, "YES\0") == 0 ){roop++ ;
}else if ( strcmp( ask, "Yes\0") == 0 ){roop++ ;
}else if ( strcmp( ask, "no\0") == 0 ){roop-- ;
}else if ( strcmp( ask, "NO\0") == 0 ){roop-- ;
}else if ( strcmp( ask, "No\0") == 0 ){roop-- ;
}else{}
}
switch( roop ){
case 1: puts("Yesの箱舟"); break;
case -1: puts("Noストラダムス"); break;
default: puts("ありえな〜い"); break;
}
return(0);}
0105ガンバル初心者! ボクにも出来た!NGNG
ゴメン、また改行がおかしくなった……orz
getsとstrcmpを教えてもらったらら、やりたかったことができたよ。
嬉しかったから、ご報告。これ以上、スレ汚ししないように、
これからは自力でやるようにガンバリますです。んじゃ!
0106デフォルトの名無しさんNGNG
http://hidebbs.net/bbs/suzukitibi
管理人が殺したらいいよ
0107デフォルトの名無しさんNGNG
>>104
非ANSIだけどstrcmpの大文字・小文字を区別しない_stricmpとかそういう名前の関数を探してみな。
0108デフォルトの名無しさんNGNG
toupperまたはtolowerかますだけなのに。
0109デフォルトの名無しさんNGNG
日本語ではまるに一票。
0110デフォルトの名無しさんNGNG
>>109
_mbsicmp
0111デフォルトの名無しさんNGNG
#include <stdio.h>

int f(int a, int b, int c, int d)
if (b == 0)
return a;
if (c == 0) {
return a+b;
} else if (d == 0) {
return f(a, f(a, b-1, c, 0), c-1, 0);
} else {
return f(a, b, f(a, b, c-1, d), d-1);
}

return 0;
}

int main(int argc, char** argv)
{
printf("%d\n", f(3, 3, 65, 2));
return 0;
}


このプログラムがうまく動かないのですが、どうすればよろしいでしょうか?
ただ数値を出力するだけなんですけど・・・。
0112デフォルトの名無しさんNGNG
>>111
関数 f の開始括弧が無い

……あとは再帰関数の停止可能性を考えるだけか
0113デフォルトの名無しさんNGNG
すみません、こういうことで。

#include <stdio.h>

int f(int a, int b, int c, int d)
{
if (b == 0)
return a;
if (c == 0) {
return a+b;
} else if (d == 0) {
return f(a, f(a, b-1, c, 0), c-1, 0);
} else {
return f(a, b, f(a, b, c-1, d), d-1);
}

return 0;
}

int main(int argc, char** argv)
{
printf("%d\n", f(3, 3, 65, 2));
return 0;
}


間違いがなければ必ず有限時間で停止するはずなのですが・・・・・・。
0114112NGNG
>>113
ちょっと確認できそうに無い
でも、こっちで試したら無理だった

有限時間で停止するけど、その間に関数が再帰する個数が
システムで用意されたスタック数を超えているような気がする

多分そっちも何も出力されずに終了したんだと思うけど、
それは多分スタックオーバーフローが起きているせい

遅延評価をサポートすれば平気かもしんない
0115デフォルトの名無しさんNGNG
スタックの容量を拡張してみるとか。
再帰関数を用いないような構造にするとか・・・。
0116デフォルトの名無しさんNGNG
>>109
/* _Bool volatile Switch; */
...
puts("しばらく止めますんで、変数Switchにtrue/falseを念写してください。");
for(;;);
...
0117デフォルトの名無しさんNGNG
>>113
いたる return の前の行に
printf("[%d %d %d %d]",a,b,c,d);
でも入れてみなさい。
0118デフォルトの名無しさんNGNG
>>117
それなら
int f...
{
/* ここ */
に1個だけで十分だと思うが
0119117NGNG
あ、あぁぁ・・・。
(・・;)soune
0120デフォルトの名無しさんNGNG
>>113
例えスタックが足りても,intじゃすぐに桁溢れしそうな気分。
0121デフォルトの名無しさんNGNG
> 例えスタックが足りても

漢字ぐらいちゃんと書け ぼけ
0122デフォルトの名無しさんNGNG
> intじゃすぐに桁溢れしそうな

intであふれるのは「桁」じゃねーよ ぼけ
BCDじゃああるまいし ぼけ
0123デフォルトの名無しさんNGNG
> printf だと使わないけど、sprintf だと結構使う罠

昔と今では戻り値が違ってしまっている関数の典型!
0124デフォルトの名無しさんNGNG
>>40
> (*printf)("Hello, Warld.");

ぼけ。英単語くらいちゃんとかけよ
0125デフォルトの名無しさんNGNG
>>124
もっと早くつっこめ ぼけ
0126デフォルトの名無しさんNGNG
ぼ け先生の臭いがする!クンクンッ!くさっ!
0127デフォルトの名無しさんNGNG
>>125
じゅうぶんぬれてから
0128デフォルトの名無しさんNGNG
>>113
再帰関数を使わないプログラムにする必要がある。
最悪の場合、goto を使うしかないのか・・・。
0129デフォルトの名無しさんNGNG
>>113 >>128
アルゴリズムどうにかする方が先だろ。
else { //d>0
return f(a, b, f(a, b, c-1, d), d-1);
}

ここ,aやbが変化しないから,まじめに再帰させる必要がない。
a+bの値だけチェックして,処理省略しろ。
0130デフォルトの名無しさんNGNG
>>124
世界は戦争(war)に満ち溢れているんだよ。
0131デフォルトの名無しさんNGNG
war==ワーですか?
0132デフォルトの名無しさんNGNG
www = わーわーわー
0133デフォルトの名無しさんNGNG
  ○○
 ○  ○   ワー
○ ● ○    ワー
 ○  ○
  ○○
0134デフォルトの名無しさんNGNG
>>133
こんな所でジーコの対中国選の秘策をばらすなよ
0135デフォルトの名無しさんNGNG
warning
×ワーニング
○ウォーニング
0136デフォルトの名無しさんNGNG
NULLは?
0137デフォルトの名無しさんNGNG
ニル
0138デフォルトの名無しさんNGNG
ナォ
0139デフォルトの名無しさんNGNG
んうるるるる
0140デフォルトの名無しさんNGNG
なあ、120 じゃないんだけど突っ込ませてもらうぞ

>>121
>漢字ぐらいちゃんと書け
描いてあると思うぞ

>>122
>intであふれるのは「桁」じゃねーよ
溢れるのは2進数の1“桁”
十進数だけが世の中を支配していると思ってはいけませぬ
0141デフォルトの名無しさんNGNG
>>136 なる
0142デフォルトの名無しさんNGNG
NULL ぬる
'\0'  なる
0143デフォルトの名無しさんNGNG
>>135
最後を「グ」って表記した時点で君の負け。
0144デフォルトの名無しさんNGNG
>>129
具体的には?
再帰関数を使わずに再帰的な計算をするためには、
かなりの工夫が必要だと思うけど・・・。
0145デフォルトの名無しさんNGNG
ping = ピング
0146デフォルトの名無しさんNGNG
The world is mine.
The world is a mine.
0147デフォルトの名無しさんNGNG
>>144
>>144
末尾再帰でぐぐりなさい

具体的には、関数 f の一番初めにラベル START を作って、

f(a, f(a, b-1, c, 0), c-1, 0)

の呼び出しなら

b = f(a, b-1, c, 0);
c--;
d = 0;
goto START;

に変換
こうすれば呼び出しネスト数が稼げる
……稼げてないような気もしないでもない

これ以外の方法だと、スタックをヒープか2次記憶上に作る方法
0148デフォルトの名無しさんNGNG
>>147
それだと、行きは出来ても帰りが出来ないような・・・。
しかも goto が出てくるし。
0149デフォルトの名無しさんNGNG
>>148
その次の行に return があるから、戻ってくる必要ないのよ
goto でとんだ先で return すれば、元の文の return を行ったのと同じになる

ちなみに末尾再帰は遅延処理と同じ、再帰関数を高速化する手法
かなりシステムに易しいけど……C では goto を使わないと出来ない
0150129NGNG
>>144
アホっぽく書くと
数列 A(n)=A(n-1)+1 を計算するのに,再帰を使うのはあらゆる資源の無駄。
そういう話。<アルゴリズム
最適化を言葉尻に付けないと伝わらない?

else{
  if( a+b == 0 ){ return 0;
  }else{ f(?????); }
}
さて ????? に入るのは?
0151デフォルトの名無しさんNGNG
>>150
いや、そのコードだと値を返さないコードパスが出てくるやん
0152デフォルトの名無しさんNGNG
??? に書き換えたとき間違えた…(TT

else{
  if( (a+b)==0 ){ return 0; }
  else{ return f(?????); }
}

まぁ,最終的にはcとd書き換えて,ループ回すかgotoで飛ぶかになると思うけど。
0153151NGNG
なんだろ
  return f(a, b, f(a, b, c - 1, d), d - 1);
のコードがそれと等価なら、a + b == 0 の時に 0 が返る理由がまずわからないOTL
0154デフォルトの名無しさんNGNG
>>153
ごめん思いっきり訂正
ちゃんと返るわ
0155151NGNG
おっけ、答えは
  a, b, a + b, d - 1
でFA
0156129で150NGNG
ざんねん。
d-1も定数にできます。
そのための if( (a+b)==0 )

>>113と元ネタを書いておくテスト
0157151NGNG
んじゃ
  a, b, a + b, 0
と言ってみる
0158デフォルトの名無しさんNGNG
>>140
漢字くらいちゃんと書け。
ついでに言えば、「たとえ」と「たとえば」くらい区別しろ。
0159デフォルトの名無しさんNGNG
やったね(^_-)⌒☆
0160デフォルトの名無しさんNGNG
>>158
「例え」……この場合は「仮令」が正解か
間違っても「例えば」じゃないぞ
0161デフォルトの名無しさんNGNG
結局、いくらになるんだろう。
桁数だけでも分かる方法はないのかな。
0162デフォルトの名無しさんNGNG
>>161
たらいまわししているだけで、あまり大きな値にはならないような気がする
0163デフォルトの名無しさんNGNG
>>120のソース
スタックサイズに30000000バイト用意してもおわんねえ('A`)
0164デフォルトの名無しさんNGNG
変換ミスっているかもしれないけど、誰かこれを実行お願い
今使ってるパソコンコンパイラ無くて

#include<stdio.h>

int f(int a, int b, int c, int d){
START:
if (b == 0)return a;
if (c == 0)return a + b;
if (d == 0) {
b = f(a, b - 1, c, 0); c = c - 1;
goto START;
}
if (a + b == 0)return 0;
c = a + b; d = 0;
goto START;
}

int main(int argc,char **argv){
printf("%d\n", f(3, 3, 65, 2));
return 0;
}
0165デフォルトの名無しさんNGNG
('A`)おわんない
0166デフォルトの名無しさんNGNG
f(3,3,65,2)→f(3,3,6,0)で
f(b,c) [a=3,d=0] が
f(f(f(f(f(f(f(f(f(f(f(0,1),1),1),2),2),3),3),4),4),5),5)
=f(f(f(f(f(f(f(f(a^3+a^2+a=39,2),2),3),3),4),4),5),5)
=f(f(f(f(f(f(蚤^x(x=1→{蚤^x(x=1→39)}+1),3),3),4),4),5),5)
=f(f(f(f(f(f(蚤^x(x=1→"10進数19桁ぐらい"),3),3),4),4),5),5)
f(f(f(f(f(f("10進数5803181603368462434桁ぐらい"),3),3),4),4),5),5)

ぬるぽ!!
0167デフォルトの名無しさんNGNG
(´ι _`  )
0168164NGNG
やっぱ手元でテストできないと不便だな
すまない、164 は忘れてくれ
0169デフォルトの名無しさんNGNG
わっすれられないの〜
0170デフォルトの名無しさんNGNG
28734重の関数呼び出しまでいって撃沈した
0171164NGNG
>>164
わすれろーわすれろー
0172デフォルトの名無しさんNGNG
>>111はどういう関数が欲しくてこういう再起にしたのかまったく見えてこないのは凄いと思った。
0173デフォルトの名無しさんNGNG
>>172
みんな当然のようにがんばってるから、もしかしてあの関数の意味が
分からないのって俺だけかと思ってたよ。

安心。
0174デフォルトの名無しさんNGNG
int& x という宣言を見かけたのですがこれってどういう意味なんですか?
0175デフォルトの名無しさんNGNG
参照、すなわち変数の別名定義のためのもの。
0176デフォルトの名無しさんNGNG
でもC++。
0177デフォルトの名無しさんNGNG
例えばint *(*(**Hoge)())();という宣言があったとしたら、
式の中で*(*(**Hoge)())()と書けばint型の値が得られる。
って具合のCの宣言の構文からは大きくはずれているんだな。
0178174NGNG
どうもありがとうございました。
0179デフォルトの名無しさんNGNG
>>177
ワケワカラン(AA略
0180デフォルトの名無しさんNGNG
>>179
お前はVBでも使ってろよ。
0181デフォルトの名無しさんNGNG
>>177
そもそも
int *a; じゃなくて
int* a; って書くのが標準の
キモ言語だから仕方ない。
0182デフォルトの名無しさんNGNG
どうでもいい
0183デフォルトの名無しさんNGNG
お前らいい加減FAQまとめろよ。
何回同じ質問すれば気が済むんだ。
0184デフォルトの名無しさんNGNG
お前がやれ
0185デフォルトの名無しさんNGNG
/* >>113 と等価なプログラム */
#include <stdio.h>
int a

int g(int b, int c)
{
if (b == 0) return a;
if (c == 0) return a + b;
return g(g(b-1, c), c-1);
}

int f(int para_a, int b, int c, int d)
{
a = para_a;
if (d != 0) c = a + b;
return g(b, c);
}

/* main()は >>113 と同じ。 */

>>111,113 は、計算できないのを知ってて訊いてるような気がするな。
なにか、解答の用意があるなら教えて。
それともレポートか何か?
0186デフォルトの名無しさんNGNG
アッカーマン
0187デフォルトの名無しさんNGNG
似てるけどチョト違う。
0188デフォルトの名無しさんNGNG
>>185
スタックサイズを大きくするか、再帰関数を使わないプログラムに書き換えない限り無理みたいです。
普通の方法だと容量おヴぇrしてしまうから。
0189デフォルトの名無しさんNGNG
再帰にも色々あってさ、なにも一気に全演算をしなくてもいいわけさ。
10000回の再帰でも、100段の再帰*100回(+ある程度のコスト)に帰着させられる場合も多いし。
0190デフォルトの名無しさんNGNG
それが帰着できないから困っているのですけど・・・・・・。
0191デフォルトの名無しさんNGNG
スレタイは前の
「Cなら俺に訊け」
の方がよかった。
0192デフォルトの名無しさんNGNG
プログラム言語じゃない方のC・・・
0193デフォルトの名無しさんNGNG
ダッコ♪
0194デフォルトの名無しさんNGNG
C言語
C++言語
C#言語
Pascal言語
0195デフォルトの名無しさんNGNG
C言語・C++と言う奴は多くても、C言語・C++言語という奴はほとんど居ない。
C・C++と言えよぼけ、とも思うがどうでもいい。
0196デフォルトの名無しさんNGNG
C++は"言語"を付けなくても区別(する対象もない)がつくだろ。
0197デフォルトの名無しさんNGNG
とりあえず、185のg関数について考えてみる。
これを展開して行くと判るが、
g( 0, 1 ) = a; g(1,1) = a+a; g(2, 1) =a+a+a... g( t, 1 ) = (t+1)*a;
g(t,1)を g1(t) とおく。 ( g1(t) = (t+1)*aということ. )

g( 1, 2 ) = g(a, 1); g(2,2) = g1(g1(a) ) ...
g( t, 2 ) = Σ(j=1; j<=t; a^j ) =  a^(t+1) + a^t + a^(t-1) + .... + a
これを、g2(t)とおく。
g( t, 3 ) = g2( g2( g2(....g2(a)...) ))) となる。
これで明らかだが、もはや手に負えない爆発ぶりで、そもそもintの
範囲を超えるので、答えは「未定義」。
0198デフォルトの名無しさんNGNG
scanf のあとに getchar が実行されない場合があるのを予防するために、
scanf 直後に rewind(stdin) をいれてるんですが、
これ以外の予防方法とかってありますか?
ベテランさんのウンチク待ってます。
0199デフォルトの名無しさんNGNG
>>198
最大の予防方法:scanf自体を使わない。
0200デフォルトの名無しさんNGNG
"他の方法"としては、fflush(stdin);

ただし。rewind(stdin);もfflush(stdin);も、処理系によっては動かないこともあるので注意。
0201デフォルトの名無しさんNGNG
staticの意味が
privateだったりreadonlyだったりコロコロ変わるのが許せません。
こんなおかしな言語体系は初めて見ました。
0202デフォルトの名無しさんNGNG
staticがreadonlyになるときってどんなときだ?
0203デフォルトの名無しさんNGNG
みなさんscanf使わないで、標準入力からの入力に何使ってるんですか?
fgets()とか?
0204デフォルトの名無しさんNGNG
fgets()とか
0205デフォルトの名無しさんNGNG
fgetcとか。
0206デフォルトの名無しさんNGNG
システムコールとか。




つかわねえよ
0207デフォルトの名無しさんNGNG
独習Cによるとgetche()と標準の入力関数とを併用すると不都合が
あるそうですがどういうことが起こり得るんでしょうか?
0208デフォルトの名無しさんNGNG
> staticの意味が
> privateだったりreadonlyだったりコロコロ変わるのが許せません。

readonlyの意味なんかどこにもありません
0209デフォルトの名無しさんNGNG
> システムコールとか。
> つかわねえよ

こいつ、いみわかってないでしったかぶり君
0210デフォルトの名無しさんNGNG
> スレタイは前の
> 「Cなら俺に訊け」
> の方がよかった。

じゃあ次はおまえが作れ!
ぜったいタイミングのがすなよ!
のがしたら100たたき!
0211デフォルトの名無しさんNGNG
>>208
C++のstaticなクラスメソッドはメンバを書き換えられないという意味。
とか無理やり解釈してみる。
0212デフォルトの名無しさんNGNG
unsigned int data = xxxxx;
unsigned int mask;
mask = ((data & 0xFF000000) ? 0 : 0xFF000000)
   | ((data & 0x00FF0000) ? 0 : 0x00FF0000)
   | ((data & 0x0000FF00) ? 0 : 0x0000FF00)
   | ((data & 0x000000FF) ? 0 : 0x000000FF);

sizeof(unsigned int) が4バイトです。
dataの特定のバイトブロックが0xFFなら0に、0なら0xFFに変えて
mask に格納したいのですが、これをもっと高速に実現する
方法はありますか?皆さんのお知恵をお貸しください
0213デフォルトの名無しさんNGNG
そのロジックは説明文と違う気がするが。
0でもFFでもないブロックはどうなるべきだ?
0214デフォルトの名無しさんNGNG
FAQ 1. 「あのー、scanfでうまくいかないのですが、教えてもらえますか? 具体的には...」
答え 「使うな」(おしまい)

FAQ 1. 「あのー、同じ変数がポインターだったり配列だったりするのは」
答え 「それは配列なわけではない、ポインターの指す場所の内容を得る書き方に、
配列にそっくりな[ ]を使う書き方があるだけ」
0215デフォルトの名無しさんNGNG
>>212
bit field使えよ ぼけ
0216212NGNG
>>213
あー、すまそです。0以外のブロックを0xFFに、でした。
>>215
ビットフィールドを使うと出来るんですね!?
不要と思って勉強を飛ばしてた箇所でした。これを機会に
勉強してみます。どうもです。
0217デフォルトの名無しさんNGNG
212に関連して質問だけど
unsigned intをunsigned char[4]にキャストしてバイト単位でアクセスするとエンディアンの影響受けるけど
ビットフィールドだとどうなの?
0218デフォルトの名無しさんNGNG
>>209
あれ、readってシステムコールの1つじゃなかったっけ?
0219デフォルトの名無しさんNGNG
>>212
インラインアセンブラが使えるコンパイラならインラインアセンブラで書くのが最も高速かと。
0220212NGNG
再三の間違いでスレ汚し申し訳ない…
(誤) 0以外のブロックを0xFFに
(正) 0以外のブロックを0に
0221212NGNG
>>219
それがあいにく手元の環境と私の知識では…という
不甲斐ない状況なので、なんとか小細工しながらやってみますw
0222デフォルトの名無しさんNGNG
>>212
unsigned int data = xxxxx;
unsigned int mask;
mask &= ((data & 0xFF000000) ? 0x00FFFFFF : 0xFFFFFFFF)
   & ((data & 0x00FF0000) ? 0xFF00FFFF : 0xFFFFFFFF)
   & ((data & 0x0000FF00) ? 0xFFFF00FF : 0xFFFFFFFF)
   & ((data & 0x000000FF) ? 0xFFFFFF00 : 0xFFFFFFFF);
0223デフォルトの名無しさんNGNG
三項演算子って、速度的なメリットはあまりないんだよね。
アセンブラ出力をみると、結局if-elseと変わらなかったり。
(まあ、両方定数だからjmpなしのコードに最適化されるかもしれないけど)
普通にifを使って(elseをなくす)書いた方が良い時も多々。

で、まあ、俺なら条件(0/1)に対応したテーブルを使うかな。
cmov使わないコンパイラでも、setccは使うからね。
メモリ参照になるけど、キャッシュに入っていれば分岐よりずっとマシだし。
こんな感じで。

#define maskshift(n) (((1<<8)-1) << (n))
static unsinged t24[] = { 0, maskshift(24), };
static unsinged t16[] = { 0, maskshift(16), };
static unsinged t08[] = { 0, maskshift(8), };
static unsinged t00[] = { 0, maskshift(0), };

mask = 0;
mask |= t24[(data & maskshift(24)) != 0];
mask |= t16[(data & maskshift(16)) != 0];
mask |= t08[(data & maskshift(8)) != 0];
mask |= t00[(data & maskshift(0)) != 0];
0224223NGNG
あ、見ただけじゃ何やってるかすぐには理解しにくいから
コメント必須だよ。
0225デフォルトの名無しさんNGNG
unsigned char *d = (char*)&data;
unsigned char *m = (char*)&mask;

m[0] = d[0] ? 0 : 0xff;
m[1] = d[1] ? 0 : 0xff;
m[2] = d[2] ? 0 : 0xff;
m[3] = d[3] ? 0 : 0xff;

//実はこれでも分岐は無し
0226デフォルトの名無しさんNGNG
バイト単位で処理すると、プロセッサによっては
パーシャルレジスタストールが発生しそうで。
メモリ上だと大丈夫なのかな。
0227デフォルトの名無しさんNGNG
実は212が最速というオチ。
0228デフォルトの名無しさんNGNG
>>223-224
メモリ参照になってしまっている以上、
定数利用による最適化の恩恵を受けなくなる。

普通にifで
unsigned int data = xxxxx;
unsigned int mask = 0;
if(!(data & 0xFF000000))
  mask |= 0xFF000000;
if(!(data & 0x00FF0000))
  mask |= 0x00FF0000;
if(!(data & 0x0000FF00))
  mask |= 0x0000FF00;
if(!(data & 0x000000FF))
  mask |= 0x000000FF;
0229デフォルトの名無しさんNGNG
普通にというならifなんて使うなよ
0230デフォルトの名無しさんNGNG
SDKってなんだ?
0231デフォルトの名無しさんNGNG
振り向かない事さ
0232デフォルトの名無しさんNGNG
アニキィィ
0233デフォルトの名無しさんNGNG
ってなんだ?
0234デフォルトの名無しさんNGNG
寸止めキック
0235デフォルトの名無しさんNGNG
MaわレMEら輪な居
こ
と
(゜д゜)サァ?
0236デフォルトの名無しさんNGNG
>>223
比較演算の結果ってコンパイラによって真値が異なるから
人に勧められるソースじゃないと思う。

>>229
なんでだ?
(a ? b : c)
より
if (a) b;
の方が処理が軽いぞ?
0237デフォルトの名無しさんNGNG
>比較演算の結果ってコンパイラによって真値が異なるから
>人に勧められるソースじゃないと思う。

もう一度、入門書を読んで勉強し直しましょうね。
0238デフォルトの名無しさんNGNG
ちゃんと>>1のリンク先にも書いてあったよ。
http://www.kouno.jp/home/c_faq/c9.html#2
0239デフォルトの名無しさんNGNG
>>236
処理が軽いか重いかなんぞ、標準Cには関係無い。
信じられるのは実測のみ。
0240デフォルトの名無しさんNGNG
で、実測の結果は?
0241デフォルトの名無しさんNGNG
聞いてどうする
0242デフォルトの名無しさんNGNG
全知全能な>>236様が各コードのアセンブラ出力と
実測結果とそれらの考察をレポートしてくれるでしょ。
まさか妄想であんな偉そうなことを書くなんて
恥ずかしいことはしてないはずだから。
0243デフォルトの名無しさんNGNG
仮に真のとき「1」であることが保証されるとして、

if(!(data & 0x000000FF)) mask |= 0x000000FF;

であれば直接イミディエイト値とのORですむものを、

m[(data & 0x000000FF)];

ってすると、わざわざ「&の式を評価」したあと(ifのときの手間と同じ)
「1」をレジスタに代入してからメモリ参照に行くんだよね。
0244デフォルトの名無しさんNGNG
>>227
0245デフォルトの名無しさんNGNG
>>214
>(おしまい)

ということにしたいのですね
0246デフォルトの名無しさんNGNG
>>214
>FAQ 1. 「あのー、同じ変数がポインターだったり配列だったりするのは」
>答え 「それは配列なわけではない、ポインターの指す場所の内容を得る書き方に、
>配列にそっくりな[ ]を使う書き方があるだけ」

どっちの解釈をしても吐き出されるコードにはそれほどの違いはないのだが?
0247デフォルトの名無しさんNGNG
配列=ポインタと教えたいのか?
0248デフォルトの名無しさんNGNG
ポインタで配列の代用は出来ますが、
配列でポインタの代用は出来ません。
0249デフォルトの名無しさんNGNG
実体からポインタのポインタを取り出す方法ってありますか?
int foo;
&(&(foo))なんてことは出来ませんし
0250デフォルトの名無しさんNGNG
ポインタ(a)のポインタ(b)は、ポインタ(a)の実体が出来て
はじめて意味を持つだろ?
0251デフォルトの名無しさんNGNG
>>249
int n;
int *p = &n;
int **pp = &p;
しかできないぞ。何をしたいのか知らないけど。
0252デフォルトの名無しさんNGNG
ひょっとして

char *argv[];

のことを言ってるんじゃないか?
0253デフォルトの名無しさんNGNG
>>249
「実体」のポインタはありますが、「実体」のポインタのポインタはありません。
「「実体のポインタ」という実体」があるなら、「「実体のポインタ」という実体」のポインタを得ることができますが。
0254デフォルトの名無しさんNGNG
>>249
foo にポインタのポインタがはいっているって事?
だとしたら単にキャストすれば済むんだが、違うよね。



0255デフォルトの名無しさんNGNG
>>254
だったら、&はつけないと思われ
0256デフォルトの名無しさんNGNG
>>255
254は釣りっぽ
0257デフォルトの名無しさんNGNG
>>246
auto char sine[] = "nurupo";
auto char *afo = "galtu";
extern char wara[];
char *wara;
0258デフォルトの名無しさんNGNG
配列ってのはただ配列なんだから、
int a;
char *p;
p = &a;
とした場合、aは配列である、ともいえる。
0259デフォルトの名無しさんNGNG
ハァ?
0260デフォルトの名無しさんNGNG
>>258
キャストしろ ぼけ
0261デフォルトの名無しさんNGNG
配列のように扱えるだけであって
実際には違うじゃん
0262デフォルトの名無しさんNGNG
http://www.rs.kagu.sut.ac.jp/~infoserv/j-siken/H16a2/pm06.html
を見てたんですが、仕様に
> �B 移動係数を 倍にして,�A へ戻る。
とあるにも関わらずソースでは
> mvrate /= 2.0;
となっています。これは動作目的からして仕様の間違いだと思うんですが、どうなんでしょうか?
0263デフォルトの名無しさんNGNG
char a[100];
とした場合でも、「a」が配列なのではなくて、そこから始まるメモリのセットが配列なんだよ。
0264249NGNG
皆様ありがとうございます。言われてみると当然のことですね。
むしろ、このようになっていないと予めプロセス空間内にポインタへのポインタへのポインタへの・・・と
無限のポインタリファレンスが存在しなければならない事になりかねませんし。
0265デフォルトの名無しさんNGNG
配列ってのは、使い方のことではなく、
メモリブロックの扱いのことなんだよ。
だから、スタック域だろうがヒープ域だろうがテキスト域だろうが、
特定の型が複数並んでいるという認識で使う場合、
それは配列なんだよ。
0266デフォルトの名無しさんNGNG
>>261
だからそれが配列なんだよ。
0267デフォルトの名無しさんNGNG
sizeof
0268デフォルトの名無しさんNGNG
>>263
char a[100];
として、
&a[0]
&a
は別物だが?
0269デフォルトの名無しさんNGNG
>>262
100回おきに移動係数を倍にしていけば誤差が酷くなる一方で、
いつまでたっても収束しないから仕様書側が間違ってるな。
問題を書き写した時のtypoじゃないかと推測するが…。
IPAがそんなにアホとも思えないし。
0270デフォルトの名無しさんNGNG
>>268
同じですが
0271デフォルトの名無しさんNGNG
おまいは&0[a]って書いて自己満に浸ってろ
0272デフォルトの名無しさんNGNG
>>268
バカハケーン
0273デフォルトの名無しさんNGNG
>>270
アフォですか?
0274デフォルトの名無しさんNGNG
>>272
&a[0] は char*
&a は char**
なんだが
0275デフォルトの名無しさんNGNG
論より証拠

#include <stdio.h>

int main() {
  char a[100];
  printf("&a[0]: %d\n&a: %d\n", (int)(&a[0]), (int)(&a));
  return 0;
}

>gcc tes.c

>a
&a[0]: 2293528
&a: 2293528
0276デフォルトの名無しさんNGNG
>>273-274
バカハケーン
0277デフォルトの名無しさんNGNG
>>274
じゃ、これやってみろ
char **kuzu;
kuzu = &a;
0278デフォルトの名無しさんNGNG
値は同じでも型は違う。
0279デフォルトの名無しさんNGNG
>>275
じゃ、これやってみろ
gets(a);
gets(&a);
0280デフォルトの名無しさんNGNG
今始めて気づいたが&aの仕様って

int a[10], b, *p;
p = &a;
p = &b;

みたいに配列と変数を統一的にアドレスが取れるメリットがあるんだな。
ようやくこの変態仕様の謎が解けたような気がする。
0281デフォルトの名無しさんNGNG
>>280
キャストしろ ぼけ
0282デフォルトの名無しさんNGNG
>>270
ワラタ
0283デフォルトの名無しさんNGNG
>>275-276
本気ならオモシロすぎるぞ
0284デフォルトの名無しさんNGNG
>>278
バカハケーン
0285デフォルトの名無しさんNGNG
>>279
>> gets(&a);
tes.c:6: warning: passing arg 1 of `gets' from incompatible pointer type

あたりめぇだろ。この場合aはcharへのポインタと同義、&aはcharへのポインタへのポインタ
gets(&a[0])とすりゃ当然通るがな
0286デフォルトの名無しさんNGNG
>>284
おまいが赤面してるのは分かったから荒らすな
0287デフォルトの名無しさんNGNG
>>280
そういうときは
p = a;
だろ。
0288デフォルトの名無しさんNGNG
小括弧→()が関数への引数を渡すためのものだと思い込んでいるとCの随所でハマる気がする。
関数ポインタとかキャストとか。
0289デフォルトの名無しさんNGNG
>>287
字面を統一的に書けなくもないって話だよ。実際に書くかどうかはともかく。

>>ALL
C FAQ 6章 配列とポインター
6.12:
配列を参照することはポインターに成り下がることを考えれば、arr という配列があったとしてarrと&arrの違いは。

A:
データ型。

ANSI/ISO Cの元では&は「Tの配列へのポインター」を産み出す。これ は配列全体を指す。
(ANCI Cが誕生する前は、arrの前に&を付けるこ とは、たいてい警告を招き、たいてい無視された。)
すべてのCコン パイラで配列への(キャストのない)参照はポインターを産み出す。
こ のポインターはTへのポインターで配列の最初の要素を指す((質問 6.3, 6.13, 6.18も参照のこと)
0290デフォルトの名無しさんNGNG
>>289

>>280
はキャストしてないとコンパイルエラーですが何か?
0291デフォルトの名無しさんNGNG
>>290
warning C4047: '=' : 間接参照のレベルが 'int *' と 'int (*__w64 )[10]' で異なっています。
# Visual C++@/W3
0292デフォルトの名無しさんNGNG
だから配列ってのは使い方の名前なんじゃなくて
使われる対象の名前なんだってばよ。
0293デフォルトの名無しさんNGNG
つまり>>289自身、自分で貼ったFAQの意味が理解しきれてないと。
分かってたら型の違う物を無キャストで代入したりしないよな。
(>>280=>>289という仮定のもとに、だが)


あ、仮定が違ってる気がする
0294デフォルトの名無しさんNGNG
前から読み返してみると、どうも>>263に対する>>268の答えかたが著しくまずかった気がする。
メモリ位置の話の流れを汲んで読むと、>>268は&a[0]と&aのアドレスが別と言ってるように読み取れる。
>>274あたりもそう考えた上でのサンプルだろうし。
0295デフォルトの名無しさんNGNG
(ANCI Cが誕生する前は、arrの前に&を付けるこ とは、たいてい警告を招き、たいてい無視された。)
↑ここなんだが、
拡張子 .c ならwarningでとりあえずコンパイルは通る。
拡張子 .cpp ならエラーでコンパイルは通らない。
そして、ここは「C言語なら俺に聞け!」スレ。
0296デフォルトの名無しさんNGNG
>>290はC++でコンパイルしてるんだろ。
0297デフォルトの名無しさんNGNG
>>294自己レス
>>274あたりも→>>275あたりも
0298デフォルトの名無しさんNGNG
おまえら warning 出ても放っておくタイプ?
0299デフォルトの名無しさんNGNG
たとえば、
char a[100];
として、
char (*p1)[100];
char *p2;
を定義して、
p1 = &a; (warning 出ない)
p2 = &a; (warning 出ても無視)
と代入して、
p1++;
p2++;
の意味の違いについてどうよ?
0300デフォルトの名無しさんNGNG
>>298
コンパイルできないのが問題なんじゃなかったのか?w
それに実際の開発で&aなんて書く奴はいないから警告なんて発生しないだろ。
0301デフォルトの名無しさんNGNG
>>298
あるソフトの開発を引き継いだんだが、
ビルドしようとしたとき、warningが100個ぐらい出て泣きたくなった。
0302デフォルトの名無しさんNGNG
>>298
基本的に-Wall -Werrorだけど、未使用変数の警告だけはUNREFERENCED_PARAMETER()で殺してる。
ところで、ちょっとスレ違いっぽいがこのマクロはWin32専用なんだけどUNIX系ではどうやって警告殺すものなの?
0303デフォルトの名無しさんNGNG
殺さない
0304デフォルトの名無しさんNGNG
>>299
意味って言うか挙動は代わらないんじゃないの。
高度なバグ検出ツールならp1の範囲チェックをしてくれるかもしれないけど。
0305デフォルトの名無しさんNGNG
>>303
GTK+やXでプログラム組んでると渡されても使わない変数ってのが出てくるものじゃないの?
ひょっとすると
int foobar(int int1, int int2) {
/* int2が不要 */
printf("%d", int1);

/* 警告対策 */
int2 = 0;
return 0;
}
こうやって逃げるとか?
0306デフォルトの名無しさんNGNG
>>304
p1++ は p1 = p1 + sizeof(char) * 100;
になる
0307デフォルトの名無しさんNGNG
>>301
ホントに100個なら、楽勝。
なぜかコンパイルすら通らないソースが回ってきたことはあったが。。。
0308デフォルトの名無しさんNGNG
a[100]のaをポインタ変数と勘違いしている人がいるスレはここですか。
0309デフォルトの名無しさんNGNG
定数は変数の代わりをすることはできませんが、
変数は定数の代わりをすることができます、

程度のセリフにすぎないな
0310デフォルトの名無しさんNGNG
> 拡張子 .c ならwarningでとりあえずコンパイルは通る。

いいえ、ノーエラーで通ります。
0311デフォルトの名無しさんNGNG
うちも警告でないなあ
0312デフォルトの名無しさんNGNG
> いいえ、ノーエラーで通ります。

いや、拡張子 .c ならwarningでとりあえずコンパイルは通る。
0313デフォルトの名無しさんNGNG
メモリやレジスタ上での変数の扱われ方を考えればすぐの答えがでるはずだけど。
0314デフォルトの名無しさんNGNG
> いや、拡張子 .c ならwarningでとりあえずコンパイルは通る。

警告もエラーもでません
0315デフォルトの名無しさんNGNG
> a[100]のaをポインタ変数と勘違いしている人がいるスレはここですか。

ポインター定数でしょ?
0316デフォルトの名無しさんNGNG
> 警告もエラーもでません

コンパイラがぼけなんでしょう
0317デフォルトの名無しさんNGNG
ちょっと待って、トイレ逝ってくる
0318デフォルトの名無しさんNGNG
>>314
警告レベルは
0319デフォルトの名無しさんNGNG
>>317がトイレに行ってるうちに勝利宣言ニダ!チョッパリは逃げたニダ!ウリの勝ちニダ!
0320デフォルトの名無しさんNGNG
>char (*p1)[100];

こんな定義は面倒だからあまり使わないな…。
それが厳密なんだろうけど。
0321デフォルトの名無しさんNGNG
これじゃどっちもあらしと変わらんなぁ
0322デフォルトの名無しさんNGNG
char (*p1)[100];
char a[100];

p1 = &a;

ノーエラー、ノー警告
警告でるコンパイラーにおめにかかりたい
0323デフォルトの名無しさんNGNG
scanfの話をしないだけマシと思え
0324デフォルトの名無しさんNGNG
> UNIX系ではどうやって警告殺すものなの?

そもそも出るようなコードかかないので平気
0325デフォルトの名無しさんNGNG
>>302
#define UNREFERENCED_PARAMETER(P) { (P) = (P); }
なんてdefineされてるだけだな。
lint用にもなってるし、
(void)(P);なんてのが書けない頃からあるのかな。
なんか、骨董品て漢字だね。
0326デフォルトの名無しさんNGNG
char *p = "0123"+4;
printf("%s", p);
0327デフォルトの名無しさんNGNG
>>320
厳密か厳密じゃないかということではなくて、
char (*p1)[100];
char *p2;
これらはそもそも意味が違う。

charのsizeを1とするなら、
p1++ が p1 += 100;
p2++ が p2 += 1;
で、
p2の意味で使いたいなら、
p2 = a; または p2 = &a[0];
と書くだろ?
p2 = &a;
はおかしいって話。(そう書くヤシがいるかいないかは別問題。)
0328デフォルトの名無しさんNGNG
>>322
おい、おおぼけ。いつの間に話の対象コードをすりかえてんだよ。
>>280がCで警告出るという話だったんだろうが。勝手に>>299と混ぜるなよ。
0329デフォルトの名無しさんNGNG
>>328

>>280 がCで警告が出るかどうかは環境依存らしい。

>>289
ANSI/ISO Cの元では&は「Tの配列へのポインター」を産み出す。これ は配列全体を指す。
(ANCI Cが誕生する前は、arrの前に&を付けるこ とは、たいてい警告を招き、たいてい無視された。)
すべてのCコン パイラで配列への(キャストのない)参照はポインターを産み出す。
こ のポインターはTへのポインターで配列の最初の要素を指す((質問 6.3, 6.13, 6.18も参照のこと)
0330デフォルトの名無しさんNGNG
お前らC FAQなら俺に聞けスレでも立ててここから出て行け
0331デフォルトの名無しさんNGNG
>>310=>>314=>>322でしょ。問題にしてるコードが違うのに何言ってんだって話なんだけど。
0332デフォルトの名無しさんNGNG
夏だな
0333デフォルトの名無しさんNGNG
ノーエラーでフィニッシュです。
0334デフォルトの名無しさんNGNG
314 じゃないけど一応書いておきます。
みなさん適当に実行してください。

#include <stdio.h>

int main(void)
{
char a[100];
char *p;
char (*pp)[100];
char *p2;

p = &a[0];
pp = &a;
p2 = &a; /* warning */

printf("p = %08X, pp = %08X\n", p, pp);
p++;
pp++;
printf("p = %08X, pp = %08X\n", p, pp);

return 0;
}
0335デフォルトの名無しさんNGNG
>>334
直張りする

C:\DOCUME~1\Owner\デスク~1\未整理>gcc --version
gcc (GCC) 3.3.1 (mingw special 20030804-1)
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

C:\DOCUME~1\Owner\デスク~1\未整理>gcc test.c
test.c: In function `main':
test.c:12: warning: assignment from incompatible pointer type

C:\DOCUME~1\Owner\デスク~1\未整理>gcc test.c -Wall
test.c: In function `main':
test.c:12: warning: assignment from incompatible pointer type
test.c:14: warning: unsigned int format, pointer arg (arg 2)
test.c:14: warning: unsigned int format, pointer arg (arg 3)
test.c:17: warning: unsigned int format, pointer arg (arg 2)
test.c:17: warning: unsigned int format, pointer arg (arg 3)

C:\DOCUME~1\Owner\デスク~1\未整理>a
p = 0022FF18, pp = 0022FF18
p = 0022FF19, pp = 0022FF7C
0336デフォルトの名無しさんNGNG
警告
(14): warning C4313: 'printf' : 書式文字列内の '%X' が '<不明>' 型の引数 2027955116 と競合しています。
(12): warning C4047: '=' : 間接参照のレベルが 'char *' と 'char (*__w64 )[100]' で異なっています。
(17): warning C4313: 'printf' : 書式文字列内の '%X' が '<不明>' 型の引数 2027955116 と競合しています。
(14): warning C4313: 'printf' : 書式文字列内の '%X' が '<不明>' 型の引数 2027957036 と競合しています。
(17): warning C4313: 'printf' : 書式文字列内の '%X' が '<不明>' 型の引数 2027957036 と競合しています。

実行結果
p = 0212FE6C, pp = 0212FE6C
p = 0212FE6D, pp = 0212FED0
Press any key to continue

Visual C++
0337デフォルトの名無しさんNGNG
336に書き忘れ。

/W3
0338デフォルトの名無しさんNGNG
>>331
っていうか、違う話してたのはおまえのほうだろうが
0339デフォルトの名無しさんNGNG
%X なんかふつうつかわねーよ ぼけ
%xか%08xとかだろ?

もしくは %p
0340デフォルトの名無しさんNGNG
Cで16進を大文字で書くやつはぼけ
0341デフォルトの名無しさんNGNG
> /W3

ふつう -W3
(わたしは-W4か-Wxだが)
0342デフォルトの名無しさんNGNG
藻前はVCのWallで氏ね
0343デフォルトの名無しさんNGNG
-W4
にしといた方が良いって聞いたことあるんですけど・・・
0344デフォルトの名無しさんNGNG
>>341
通は-W0で完璧なコードを書く
0345デフォルトの名無しさんNGNG
>>343
ふつうそうだね。
っていうか、それ以前にVCなど使うやつはぼけ
0346デフォルトの名無しさんNGNG
コンパイラをひょいひょい変えられる香具師がうらやますい
世間一般そんなに甘くない
0347デフォルトの名無しさんNGNG
-W4 がいいっていう話が載ってるサイトってありますか?
0348デフォルトの名無しさんNGNG
> コンパイラをひょいひょい変えられる香具師がうらやますい

ふつうひょいひょいかえねーよ ぼけ
かえないからこそVCだめなわけ。わかる?
0349デフォルトの名無しさんNGNG
-W4より-WxだなあVCなら常識
0350デフォルトの名無しさんNGNG
オプションのよしあしについて書かれたサイトってありますか?
0351デフォルトの名無しさんNGNG
>>348
全然わかんねー(プ
おめーヴァカ?

「だめ」の理由言ってみな
0352デフォルトの名無しさんNGNG
>>351
>>348には複雑すぎて使えないんだろ ぼけ
0353デフォルトの名無しさんNGNG
ふつうcc
0354デフォルトの名無しさんNGNG
VCたしかにだめだね。
「//」が使えるかのようにかいてあるが、
また、改行をLFだけにしてもうごくようにみえるが、
実はその両方を同時にだと混乱してエラーでまくりになる。ぼけすぎ > VC6
0355デフォルトの名無しさんNGNG
"Visual" C++である以上、
IDEからの利用を想定してるだろう・・・
0356デフォルトの名無しさんNGNG
IDEでもLFだけにできなかったっけ?
0357デフォルトの名無しさんNGNG
DOS窓で画像使うことってできるの?
標準じゃないかな?(´・ω・`)
0358デフォルトの名無しさんNGNG
>>357
98なら出来るよ。
0359デフォルトの名無しさんNGNG
自分でcmd.exeのフロントエンド作れ
0360デフォルトの名無しさんNGNG
>>358
MEじゃ無理?
できるならやり方ググッてきて分からなかったら質問します。
0361デフォルトの名無しさんNGNG
ずいぶん流れちゃったけど、一応おバカな>>236==>>243につっこみ。

>仮に真のとき「1」であることが保証されるとして

「仮に」じゃなく、「どんなコンパイラでも」「常に」であると指摘されているのに
理解できないのですね。

>if(!(data & 0x000000FF)) mask |= 0x000000FF;
>
>であれば直接イミディエイト値とのORですむものを、

「分岐予測ミス」とか「パイプらインストール」という言葉を聞いたことが無いのですね。
メモリ参照と分岐予測ミスのどちらを避けるかというだけの話でしょ。
一般には、頻繁に参照されるメモリへのアクセスのほうが、
ある程度予測をミスする可能性のある分岐よりは、速くなるけどね。

でも、私はあなたと違って、実測しないとどちらが速いかは断定できませんが。
0362デフォルトの名無しさんNGNG
パイプらインストール
0363デフォルトの名無しさんNGNG
すでにどっかで質問されてたらスマソ。

初めてC言語をやってみようと思ってパソコンにダウンロードしてやってみました。
プログラムを作ってみてコンパイルしてみたら
インクルードファイル 'stdio.h' をオープンできないって言われました。

これはどういうことですか?インクルードファイルってものがないのでしょうか。
0364デフォルトの名無しさんNGNG
>>363
・パスがきちんと設定されていない
・インストールミス
0365デフォルトの名無しさんNGNG
初心者/環境依存スレで何度も何度も何度も同じ質問が出てると思うよ。
0366デフォルトの名無しさんNGNG
PATH=%PATH%;C:\BORLAND\BCC55\BIN
LIB=C:\BORLAND\BCC55\LIB
INCLUDE=C:\BORLAND\BCC55\INCLUDE

と設定して、INCLUDE、BIN、LIBっていうディレクトリもそこにちゃんとあるのですが
。
ならインストールミスになるんですかね
0367デフォルトの名無しさんNGNG
http://www.borland.co.jp/cppbuilder/freecompiler/devsupport.html

それと、続きはこっち
http://pc5.2ch.net/test/read.cgi/tech/1091264964/l10

ちゃんとスレ内だけでもCTRL+Fしてからな。
0368デフォルトの名無しさんNGNG
>>360
98ってのは、Windows98のことじゃなくて、
PC-98シリーズのってことね。
98版ウィンドウズでも対応してたはず。
0369デフォルトの名無しさんNGNG
16bitでSVGA-BIOS叩けば出来るとは思う。MEだし。


やりたくないけど。
0370デフォルトの名無しさんNGNG
>367
ありがと。

けどやっぱし出来ないです。才能ねぇなぁ。こっち方面には向いてないのかな…
0371デフォルトの名無しさんNGNG
>>368
さんくす
0372デフォルトの名無しさんNGNG
x = (a ? b : c);
これって分岐含まないのですか?
0373デフォルトの名無しさんNGNG
>>372 どっちともいえない。
0374デフォルトの名無しさんNGNG
>>372
含みます
0375デフォルトの名無しさんNGNG
まあ、演算子だからな。
制御文とは違う。
0376デフォルトの名無しさんNGNG
>>374
そもそも「分岐含む」の意味自体不明なのに、何を根拠にそう言えるのですか?
0377デフォルトの名無しさんNGNG
>>376
馬鹿から根拠の無い自信を奪ったら廃人が残るだけですよ。少しは察しなさい。
0378デフォルトの名無しさんNGNG
質問スレで根拠の無い回答をするような迷惑な馬鹿はいっそ・・・
0379374NGNG
すまねぇ_| ̄|○
ただ単にコードを見た途端に、脳内でアセンブラに変換されただけ
確かにそれは C では条件分岐じゃない
0380デフォルトの名無しさんNGNG
脳内でも最適化は掛けろよ。
0381デフォルトの名無しさんNGNG
ほんとだ、確かに消えた
逝ってきますねOTL
0382デフォルトの名無しさんNGNG
>>381
aが静的に分かれば消える。そうでないなら分岐する。
まぁ条件付きmoveとかあればそれになるかも知れないが。
0383デフォルトの名無しさんNGNG
相変わらずレベルの低いスレだな。
アセンブラの出力見れば一発なのに
なんでこんな何十レスも引っ張ってるんだ。
0384デフォルトの名無しさんNGNG
>382
一応突っ込んどくと
最適化で分岐命令をなくすために
定数であることが望まれるのは、bとcな。
で、変数であっても、条件付きmoveで分岐をなくせる場合がある、と。
0385デフォルトの名無しさんNGNG
>>384
真性?
0386デフォルトの名無しさんNGNG
マンコ演算子
0387デフォルトの名無しさんNGNG
>385
x = (a ? b : c);
の場合だろ?
何かおかしいか?

あ、おまえの頭か。すまんすまん。
0388デフォルトの名無しさんNGNG
>>383

>>212 あたりからだから、170レス超えてる
0389デフォルトの名無しさんNGNG
途中>>246-356あたりは、「配列とポインタ」「警告オプション」の話題。
ま、レベル的には同じようなものかも。
0390デフォルトの名無しさんNGNG
さらしあげ
0391デフォルトの名無しさんNGNG
> IDEからの利用を想定してるだろう・・・

ここいらでもうだめすぎ
0392デフォルトの名無しさんNGNG
exit関数でプログラムを強制終了すると開いてあるファイルはすべて閉じられるそうですが、
malloc関数や、realloc関数類などのメモリ確保関数で確保したメモリ領域もexit関数を実行
すると解放されるのでしょうか?
それともexit関数で終了する時もfree関数は必要ですか?
0393デフォルトの名無しさんNGNG
自動で解放されます。
0394デフォルトの名無しさんNGNG
freeはしなくても開放されます。
ただ、exitで終了しないときに、
色々トラブルの元になるのでfreeはしろ。
0395デフォルトの名無しさんNGNG
>>393-394
ありがとうございます。
ちゃんと解放されるみたいですね。
0396デフォルトの名無しさんNGNG
>>394
嘘を教えないように。
0397デフォルトの名無しさんNGNG
まあ、自動で解放するとしても、可能な限り free しておくのが吉ってことだ
0398デフォルトの名無しさんNGNG
警告 W8004 HIMITU.cpp 111: 'HOGE' に代入した値は使われていない(関数 main() )

HOGE=100; で宣言したんですけどほんとにHOGEに代入されていないの?
HOGE += HOGE * i でインクリメントしています。
0399デフォルトの名無しさんNGNG
必要なデータをfreeしちゃうバグが入り込む確率が上がる
0400デフォルトの名無しさんNGNG
自動で解放される処理系も結構あるらしいな。
規格にあるわけじゃないので、全部が解放してくれるわけじゃないが。
0401デフォルトの名無しさんNGNG
物事には全て対称性というものがあるんだよ。
openとclose, mallocとfree, ちんことまんこ。
この対象性を無視すると人類は絶滅する。
0402デフォルトの名無しさんNGNG
対称性の破れがあってこそ、この世は物質が安定に存在していられる。
0403デフォルトの名無しさんNGNG
(゚д゚≡゚д゚)
0404デフォルトの名無しさんNGNG
> freeはしなくても開放されます。

漢字ぐらいちゃんとかけよ ぼけ
0405デフォルトの名無しさんNGNG
> まあ、自動で解放するとしても、可能な限り free しておくのが吉ってことだ

こいつしったかぶりのぼけ。
0406デフォルトの名無しさんNGNG
> 自動で解放される処理系も結構あるらしいな。

こいつもしったかぶり
規格で規定されています。
0407デフォルトの名無しさんNGNG
>>406
ANSI-Cから?C89,C99から?
見た所では規定されてないような書き方だったんだが…
0408デフォルトの名無しさんNGNG
規格で規定 規格で規定 規格で規定 規格で規定 規格で規定
規格で規定 規格で規定 規格で規定 規格で規定 規格で規定
規格で規定 規格で規定 規格で規定 規格で規定 規格で規定
規格で規定 規格で規定 規格で規定 規格で規定 規格で規定
規格で規定 規格で規定 規格で規定 規格で規定 規格で規定
0409デフォルトの名無しさんNGNG
> ANSI-Cから?C89,

なーんてまぬけなことを言っているやつが (どう違うのかわかってるのだろうか?)

> 見た所では規定されてないような

なんてかいても「読んでもいない」ことがばればれ
0410デフォルトの名無しさんNGNG
おまえらCの標準規格ぐらいよんどけ。安いんだし
0411デフォルトの名無しさんNGNG
プログラム終了前のfreeは何度か論議されているが
まともなOSであれば開放するので書かないというのが大多数
そして、freeしろという人は明確な理由を書けない
0412デフォルトの名無しさんNGNG
>>409
規格を読んだんじゃなくて、どっかのページだ。
規格は読んでない。
0413デフォルトの名無しさんNGNG
> まともなOSであれば開放するので書かないというのが大多数

っていうか、おまえがまずまともに日本語書けよ ぼけ
0414デフォルトの名無しさんNGNG
> 開放するので

しません
0415デフォルトの名無しさんNGNG
ぼ  けはスルーで。
0416デフォルトの名無しさんNGNG
> 規格を読んだんじゃなくて、どっかのページだ。

内容以前に、ANSI-Cと、C-89とかいてあるが、どうちがうのか知ってるのか? ぼけ
0417デフォルトの名無しさんNGNG
じゃあ415はスルーってことになるな
0418デフォルトの名無しさんNGNG
ANSI-C == C89です。書き間違いです。
はい、すいません。
0419デフォルトの名無しさんNGNG
boke: n 《俗》 鼻 (nose).
bike: vi, vt ゲッ[ウェッ]とやる, 吐く, げっぷをする.
n 嘔吐, げっぷ.
Bo・ker /buk(r)/
n. ボーカー George Henry Boker (1823-90) 《米国の詩人・劇作家・外交官;
400 点のソネットと, 南北戦争以前の最高の悲劇 Francesca da Rimini (1855) で認められた;
南北戦争で, 北部のために情宣活動をし, 戦後, トルコ (1871-75), ロシア (1875-78) 駐在の大使をつとめた》.
0420デフォルトの名無しさんNGNG
はあ? じゃあC89以降のはANSIじゃないってわけ?
0421デフォルトの名無しさんNGNG
bike->bokeの書き間違いだった
0422デフォルトの名無しさんNGNG
三週間以上こんなのが続くのか・・・
0423デフォルトの名無しさんNGNG
1はvoidか?
0424とほほNGNG
>>422
え、ここって規格と仕様のスレなんだとてっきり
こんなの以外にどういう展開がお好みで?
0425デフォルトの名無しさんNGNG
>>423
いやちがうはず
0426デフォルトの名無しさんNGNG
> 三週間以上こんなのが続くのか

っていうか、ここ80スレほどこういうの続いているじゃん。
いまさらその伝統を壊す気?
0427デフォルトの名無しさんNGNG
>>420
C99はISOだけじゃなかったか
0428デフォルトの名無しさんNGNG
ISOできまってからそのまんままるまるANSIにとりいれられたんだよ。
C89のときと逆!
0429デフォルトの名無しさんNGNG
>>426
お前が伝統を重んじるとは、失笑を禁じえない。
0430デフォルトの名無しさんNGNG
>>425
でも、
1 :main(void) :04/08/02 22:12
と、さりげなく書いてある。
0431デフォルトの名無しさんNGNG
それいぜんにC89以降、C89になるまで
1回も改訂や追補がなかったと思ってるのか? このぼけは
0432デフォルトの名無しさんNGNG
>>430
なわけない。

そもそも
> Cプログラマ必読 ・プログラミング言語C(通称 K&R)

この「K」の前の文字は、voidならぜったい書かない。
0433デフォルトの名無しさんNGNG
大きい改訂はそれぐらいだと把握しているが
0434デフォルトの名無しさんNGNG
>>432
全角スペースか?
0435デフォルトの名無しさんNGNG
> ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

この文の空白も彼ならあり得ないな。分かち書き嫌いみたいだし
0436デフォルトの名無しさんNGNG
>>433
すくなくとも2回はあるぞ ぼけ
0437デフォルトの名無しさんNGNG
>>432 >>435
おまえら、細かいところばかり見るなあ...。

それ以前に考えて見ろよ。スレッドのタイトルは1が決めるんだろ?
voidやその手下(? 信者?)が、
> C言語なら俺に聞け! Part 88

などと書くわけねーじゃん。
細かいところ見るまでもない。
0438デフォルトの名無しさんNGNG
「言語」がいけないのか? それを抜けばいいのか?
じゃあ、次に89を作るときには、おれが「言語」を抜いたのにしてやろう。

(ちなみに、いままで88回中、6回は俺が1だった)
0439デフォルトの名無しさんNGNG
> > Cプログラマ必読 ・プログラミング言語C(通称 K&R)
> この「K」の前の文字は、voidならぜったい書かない。

そうだな。それに、その場合の括弧の前には空白空きそう。
0440デフォルトの名無しさんNGNG
へぇ 6回もスレ立ててるんですか へぇすごいですね
0441デフォルトの名無しさんNGNG
>>438
俺は3回ぐらいだなぁ
0442デフォルトの名無しさんNGNG
>>439
細かいな...。
おまえらvoid研究家か?

ある意味voidファン?
0443デフォルトの名無しさんNGNG
その能力を生かして SPAM フィルタ作ってくれ マジで
0444デフォルトの名無しさんNGNG
>>436
AM1, TCOR1/2のことか?
0445デフォルトの名無しさんNGNG
じゃあ、おまえもつぎは「言語」ぬいてみろ > 441
void信奉者とまちがえられてふくろだたきにあう...かもな。

「聞け」がちょっといやだなあ。変えたい。
0446デフォルトの名無しさんNGNG
なんで「C言語」だとだめなんだ?
0447デフォルトの名無しさんNGNG
>>446
少しは自分の頭で考えろ!
0448デフォルトの名無しさんNGNG
厨が多いスレだな
0449デフォルトの名無しさんNGNG
>>446
規格票読め!
0450デフォルトの名無しさんNGNG
C, the Programing Languageだから
0451デフォルトの名無しさんNGNG
Shadow of Your Smile, The

Taste of Honey, A
0452デフォルトの名無しさんNGNG
>>450
ならCじゃん
0453デフォルトの名無しさんNGNG
>405 名前: デフォルトの名無しさん 投稿日: 04/08/08 12:39
>> まあ、自動で解放するとしても、可能な限り free しておくのが吉ってことだ
>
>こいつしったかぶりのぼけ。

こいつら気に入らない。
0454デフォルトの名無しさんNGNG
で、どっちがいいの?
0455デフォルトの名無しさんNGNG
C言語の範囲で自動で解放されると決まっているわけじゃない。
解放されるかどうかはOSや処理系依存。
あとはOSや処理系依存のコードを書くか。
依存しないコードを書くか好きにしろ。

0456デフォルトの名無しさんNGNG
C言語では決まっていないかもしれないが、
Cでは決まっている。
0457デフォルトの名無しさんNGNG
じゃあ、ファイルはオープンしたまま、
mallocはfreeしないってことでOKですね。
0458デフォルトの名無しさんNGNG
当然です
0459デフォルトの名無しさんNGNG
たとえばstdinを閉じるひといますか?
あれなんかopenさえしないじゃん
0460デフォルトの名無しさんNGNG
>>457-459
このレビューは参考になりましたか?
◎はい ○いいえ
0461デフォルトの名無しさんNGNG
○はい ◎いいえ
0462デフォルトの名無しさんNGNG
>>457
確保したものは開放しろ。
これ常識。
0463デフォルトの名無しさんNGNG
OSが解放してくれるから、
デバイスコンテキストもGDIオブジェクトも、
確保したままプログラムを終了すべき。
0464デフォルトの名無しさんNGNG
>>456 意味不明。
0465デフォルトの名無しさんNGNG
>>459
自分でopenしないものは自分でcloseしない。
自分でopenしたものは自分でcloseする。
自分で確保したものは自分で解放する。
常識です。
0466デフォルトの名無しさんNGNG
いいえしません。
0467デフォルトの名無しさんNGNG
そもそも終了が遅くなるのでいや
0468デフォルトの名無しさんNGNG
後片付けのできないガキどもめ
0469デフォルトの名無しさんNGNG
エディタってメモ帳じゃ駄目ですか?
0470デフォルトの名無しさんNGNG
>>469
「メモ帳」というWindowsアプリケーションでもいいです。
0471デフォルトの名無しさんNGNG
>>470
え?
0472デフォルトの名無しさんNGNG
たとえば異常終了など、プログラム中のexitの直前にopenやmallocを
開放するコードを書く奴はいるのか?
462とか465はそんな馬鹿な事をやっているんだろうな
0473デフォルトの名無しさんNGNG
>>472
漢字ぐらいちゃんと書いてからえらそうなこと言えよぼけ
0474デフォルトの名無しさんNGNG
よくみたら「〆モ帳」だったりしませんか?
0475デフォルトの名無しさんNGNG
>>473
反論できないからって・・・情けない。
0476デフォルトの名無しさんNGNG
反論するまでもないとおもわれたんだろ
0477462=465NGNG
>>472
malloc したら必ず atexit していますが、
何か?
0478デフォルトの名無しさんNGNG
>>477
馬鹿ですね。
0479デフォルトの名無しさんNGNG
freeしない奴はメモリリーク検出ライブラリの存在を知らないアホ
0480デフォルトの名無しさんNGNG
>>477
atexitには関数のポインタしか渡せないけど、どうやって解放対象を指定するの?
0481デフォルトの名無しさんNGNG
>>479
ちょっとまて
お前は何の話をしているのかわかっているのか?
メモリリークは関係無いぞ
0482デフォルトの名無しさんNGNG
>>481はメモリリーク検出ライブラリの存在を知らないアホ
0483デフォルトの名無しさんNGNG
>>482
マジで言ってるのか釣りなのか
0484デフォルトの名無しさんNGNG
実行開始時にプロセスごとにヒープ領域が割り当てられて
終了時にそれがまるごと捨てられるんであれば、
実行中に取得したメモリは自分で解放する必要ない罠
0485デフォルトの名無しさんNGNG
>>482
馬鹿ですね。
0486デフォルトの名無しさんNGNG
>>472
異常終了はしゃーないが、せめて正常終了するときくらいは書いとけよ
プログラムなんてどこで落ちるか分かんないんだから、全ての場合を考えるのは“無理・無駄”
0487デフォルトの名無しさんNGNG
>>486
書いて何かメリットあるの?
0488デフォルトの名無しさんNGNG
>>486
ヒープごと解放する手間と、確保したメモリブロック単位で解放する手間を考えると
後者はかなりの無駄と思えるが。
0489デフォルトの名無しさんNGNG
自己満足だけです。
0490デフォルトの名無しさんNGNG
>>468
0491デフォルトの名無しさんNGNG
だから後片付けはOSがしてくれるんだってば
0492デフォルトの名無しさんNGNG
自己満足という理由以外で
誰かfreeしない人たちを納得させる説明できませんか
0493デフォルトの名無しさんNGNG
自己満足だけです。
0494デフォルトの名無しさんNGNG
一瞬で終わる物ならいいが、何ヶ月も動きつづけるサーバプログラムで確保したメモリを解放しないと
メモリ上にゴミが増えすぎて最終的に破綻するから
0495デフォルトの名無しさんNGNG
プログラムの性質によるんじゃない?
単純に流れ作業実行したら終了、みたいなのだとfreeしなくてもいいけど、
ずっと無限ループして基本的に終了しないプログラムならfreeすべきだろ。
0496デフォルトの名無しさんNGNG
freeしなかったらプログラムを部品化できなくなるだろ。
0497デフォルトの名無しさんNGNG
かぶったな
0498デフォルトの名無しさんNGNG
>>491

468「後片付けのできないガキどもめ 」
491「だから後片付けはママがしてくれるんだってば 」

w
0499デフォルトの名無しさんNGNG
exitの前の話じゃなかったのか?
0500デフォルトの名無しさんNGNG
main関数のみで済ませるので問題ありません
0501デフォルトの名無しさんNGNG
>>494
それはあなたの想像での話ですか?実際にあった話ですか?
0502デフォルトの名無しさんNGNG
まあ、あれだな。
どんなプログラムか、という前提を抜きには語れないってことだ。
0503デフォルトの名無しさんNGNG
freeしないのは
・趣味的プログラミング
・小規模開発
・個人使用のプログラム
・一人で開発
・メガネでぶ or がり
・引き篭もり
・オタ
0504デフォルトの名無しさんNGNG
>>503
俺全部に当てはまるがちゃんと free してるぜ
0505デフォルトの名無しさんNGNG
このスレは参考になりましたか?
◎はい ○いいえ
0506デフォルトの名無しさんNGNG
>>501
そんなもんは実際にありますよ。
もっとも、最近はそういう分野ではCを使うことは減ってますが。
0507デフォルトの名無しさんNGNG
>>506
freeするプログラムとしないプログラム、違いはありましたか?
0508デフォルトの名無しさんNGNG
ここは違いの分かるインターネッツですね
0509デフォルトの名無しさんNGNG
freeするプログラムがエラー等で不意に落ちる確率の方が
freeしないことによるメモリリークで落ちる確率より高い罠
0510デフォルトの名無しさんNGNG
夏だな
0511462=465NGNG
>>480
void *ptrtbl[32];
int ptrtblnum;

#define DeclAtExitProc(n) void _USERENTRY AtExitProc ## n(void){free(ptrtbl[n]);}

DeclAtExitProc(0) DeclAtExitProc(1) DeclAtExitProc(2) DeclAtExitProc(3) DeclAtExitProc(4)
DeclAtExitProc(5) DeclAtExitProc(6) DeclAtExitProc(7) DeclAtExitProc(8) DeclAtExitProc(9)
DeclAtExitProc(10) DeclAtExitProc(11) DeclAtExitProc(12) DeclAtExitProc(13) DeclAtExitProc(14)
DeclAtExitProc(15) DeclAtExitProc(16) DeclAtExitProc(17) DeclAtExitProc(18) DeclAtExitProc(19)
DeclAtExitProc(20) DeclAtExitProc(21) DeclAtExitProc(22) DeclAtExitProc(23) DeclAtExitProc(24)
DeclAtExitProc(25) DeclAtExitProc(26) DeclAtExitProc(27) DeclAtExitProc(28) DeclAtExitProc(29)
DeclAtExitProc(30) DeclAtExitProc(31)

void (* _USERENTRY atexitproctbl[32])(void) = {
AtExitProc0, AtExitProc1, AtExitProc2, AtExitProc3, AtExitProc4,
AtExitProc5, AtExitProc6, AtExitProc7, AtExitProc8, AtExitProc9,
AtExitProc10, AtExitProc11, AtExitProc12, AtExitProc13, AtExitProc14,
AtExitProc15, AtExitProc16, AtExitProc17, AtExitProc18, AtExitProc19,
AtExitProc20, AtExitProc21, AtExitProc22, AtExitProc23, AtExitProc24,
AtExitProc25, AtExitProc26, AtExitProc27, AtExitProc28, AtExitProc29,
AtExitProc30, AtExitProc31, };

void *MyMAlloc(int z)
{
void *p;

if (p = malloc(z)) ptrtbl[ptrtblnum] = p, atexit(atexitproctbl[ptrtbl]), ptrtbl++;
return p;
}
0512デフォルトの名無しさんNGNG
mallocでメモリリークなんてあんの?
プログラムが終了してもメモリが確保されたまんま?!
0513デフォルトの名無しさんNGNG
>>512
というような処理系があるかもしれない。
0514デフォルトの名無しさんNGNG
ねえよ。
0515デフォルトの名無しさんNGNG
>>514 そーでもないかも
0516デフォルトの名無しさんNGNG
>>512
だから、終了しないプログラムの話をしてるんだろうが。
0517デフォルトの名無しさんNGNG
>>516
exitの前のfreeが必要かどうかの話なのに何故・・・
0518デフォルトの名無しさんNGNG
夏だから
0519デフォルトの名無しさんNGNG
501=507=512=517 でつか?
0520デフォルトの名無しさんNGNG
>>519
それだけではありません。
0521デフォルトの名無しさんNGNG
free しない派って、
「極端にレベルが高い奴」と、
「極端にレベルが低い奴」の
2通りいるし、

free する派は、
「凡庸な奴」か、
「先生にそう言われたから無批判でやっている」か、
「ただの偏執狂」かの
何れかだからな。

こんな奴らが集まって議論しても
話がかみ合わないのは当たり前だな。
0522デフォルトの名無しさんNGNG
そんなに沢山いなくて、2〜3人のような気がする
0523デフォルトの名無しさんNGNG
>>516-517
なんか前提が混乱しとるな
0524デフォルトの名無しさんNGNG
>>392からの流れだからなぁ
0525デフォルトの名無しさんNGNG
既に 100 近いレス消費しているのか……
0526デフォルトの名無しさんNGNG
夏だな
0527デフォルトの名無しさんNGNG
>>525
それなりに面白いネタだからな。
こんな素敵なネタを発見してくれた太田先生に乾杯。

また何か面白いネタを見つけれくれないかなぁ。
0528デフォルトの名無しさんNGNG
毎度毎度よく釣られること
0529デフォルトの名無しさんNGNG
     ____
    /∵∴∵∴\
   /∵∴∵∴∵∴\
  /∵∴∴,(・)(・)∴|
  |∵∵/   ○ \|
  |∵ /  三 | 三 |  / ̄ ̄ ̄ ̄ ̄
  |∵ |   __|__  | < うるせー馬鹿!
   \|   \_/ /  \_____
      \____/
0530デフォルトの名無しさんNGNG
昔から気になっていたんですけど、複数のメモリ領域を確保する必要が生じた場合ってどうしますか?
型が複数の場合とか。

if ((ary1 = malloc(Type1Max*sizeof(Type1))) == NULL) { exit(0);}
if ((ary2 = malloc(Type2Max*sizeof(Type2))) == NULL) { free(ary1); exit(0);}
・・・・・・
if ((aryn = malloc(TypenMax*sizeof(Typen))) == NULL) { free(ary1); ・・・, free(aryn_1); exit(0);}

みたいな場合です。
0531デフォルトの名無しさんNGNG
何に対して「どうしますか?」と聞いているのかが分からない
0532デフォルトの名無しさんNGNG
>>530
それでもいいし、こんなのもある
arr1=arr2=arr3==NULL;
if((arr1 = malloc(1))==NULL) goto error;
if((arr2 = malloc(2))==NULL) goto error;
if((arr3 = malloc(3))==NULL) goto error;
return; // succ
error:
free(arr1);
free(arr2);
free(arr3);

やり過ぎたければ
if((arr1 = malloc(1))==NULL) goto error1;
if((arr2 = malloc(2))==NULL) goto error2;
if((arr3 = malloc(3))==NULL) goto error3;
return; // succ
error3: free(arr2);
error2: free(arr1);
error1:
0533デフォルトの名無しさんNGNG
exit前でもfreeやfcloseしないとおかしくなるbugが
Winであったような…。
巨大なファイルを作ったまま削除されないとか、そんなやつ。
0534デフォルトの名無しさんNGNG
もうそのネタは終わってるから。
0535デフォルトの名無しさんNGNG
malloc前にfreeしたら動作がおかしくなりませんか?
0536デフォルトの名無しさんNGNG
>>535
free(0)は問題なし。
532の上は ==NULL を =NULL にすれば問題なし。
0537デフォルトの名無しさんNGNG
NULLを入れておけば大丈夫
0538デフォルトの名無しさんNGNG
>>536-537
free(NULL)は問題を起こさないんですね。ありがとうございます。
0539デフォルトの名無しさんNGNG
volatileをK&Rで調べたのですが意味不明のことしか書いてありませんでした。
なんやねんこれ。
0540デフォルトの名無しさんNGNG
>539
volatile は「なんやねんこれ」等と
言っている奴が使うものじゃないから
安心しな。
忘れてかまわんぞ。
0541デフォルトの名無しさんNGNG
>>540
知らないなら無駄だから反応しなくていいです
0542デフォルトの名無しさんNGNG
煽ったら答えが沸いてくると思ったら大間違いです:)
0543539NGNG
>>540
コンパイラに“最適化(による変数削除の)阻止”の指定を行うということは理解しています。
問題は、K&Rで全く説明がなされていない点です。
0544デフォルトの名無しさんNGNG
いやしかし、手を変え品を変え荒らし続けるもんだな。
0545デフォルトの名無しさんNGNG
  ヘ( `Д)ノ  モーコネーヨ ウワァァァン!!
≡ ( ┐ノ
:。;  /
0546デフォルトの名無しさんNGNG
>>543
volatile は
「意味不明のことしか書いてありませんでした」
と
「全く説明がなされていない」
が "同じ" と考える奴が使うものじゃないから
安心しな。
忘れてかまわんぞ。
0547デフォルトの名無しさんNGNG
>>546
ではあなたは、あの説明でvolatileの意味が説明されていると、そう謂われるわけですね?
0548デフォルトの名無しさんNGNG
>>547
volatile は
>>546 の前提から >>547 の結論を
導き出せる奴が使うものじゃないから
安心しな。
忘れてかまわんぞ。
0549547NGNG
>>548
とりあえず、あなたのマヌケなレスは安心して忘れることにします。
ありがとうございましたマヌケ。
0550デフォルトの名無しさんNGNG






























0551デフォルトの名無しさんNGNG
A8.2の説明である程度分かると思うが>volatile
つってもK&Rは全く予備知識が要らないわけじゃないから
分からないこともあるかもしれないが。
0552デフォルトの名無しさんNGNG
>550よくやった。
0553デフォルトの名無しさんNGNG
typedef struct {
char usragent[STATUS_LEN];
char refere[STATUS_LEN];
}PROFILE;
↑file1.h

PROFILE loadprofile(void)
{
PROFILE pfile;
/* いろいろな処理 */
return pfile;
}
↑file2.c

int main(void)
{
PROFILE pfile;

pfile = loadprofile();

return 0;
}
↑file3.c
0554デフォルトの名無しさんNGNG
上記のfile3.cのpfile = loadprofile();のところで
代入する変数の型が違うというエラーが出て
コンパイルできません。
何故?
0555デフォルトの名無しさんNGNG
>>555
漏れの環境だと通るけど。
変なオプションとか設定してない?
0556デフォルトの名無しさんNGNG
>554 なぜなら file3.c だと loadprofile() は int だとされるからだ
0557デフォルトの名無しさんNGNG
includeし忘れてるならPROFILE pfileで止まりそうな気が
0558デフォルトの名無しさんNGNG
即レスありがとうございます。
環境はcygwin,gcc3.3.1でオプションは何も指定してないです。
0559デフォルトの名無しさんNGNG
違う。
file1.hをincludeしても、loadprofileは宣言されてていない。
プロトタイプ宣言が問題とされている。
0560デフォルトの名無しさんNGNG
>>556
そう思って(PROFILE)とキャストしてみたんですけど
そういうキャストは出来ないとコンパイラに言われました。
0561デフォルトの名無しさんNGNG
PROFILE loadprofile(void);
を file1.h に書けばいい希ガス
0562デフォルトの名無しさんNGNG
6匹
0563デフォルトの名無しさんNGNG
釣れた
0564デフォルトの名無しさんNGNG
お騒がせしてすいません。
>>559の言うとおりプロトタイプ宣言忘れてました。
無事コンパイルできました。
ありがとうございました。
0565デフォルトの名無しさんNGNG
VxWorksとかでプログラミングしてたら、taskを終了する前に
mallocしたものは当然freeするよな。

OS非依存とか言うわりには、無意識のうちになんらかのOSを
前提としているんだろうな。
0566デフォルトの名無しさんNGNG
>>565
>>392
0567デフォルトの名無しさんNGNG
> free(NULL)は問題を起こさないんですね。ありがとうございます。

BSDではたまたま問題ないが、SystemV系ではcore dumpする。
(ってちょっと古いか)
0568デフォルトの名無しさんNGNG
> 問題は、K&Rで全く説明がなされていない点です。

カーニハンもよくわかっていないのでしょう ;-)
0569デフォルトの名無しさんNGNG
> VxWorksとかでプログラミングしてたら、

で、それなに?
どうでもいいようなマイナーなものを出せばごまかせるとでも?
0570デフォルトの名無しさんNGNG
>>569
おめーそれぜんぜんまいなーじゃねぇよ
0571デフォルトの名無しさんNGNG
>>569
充分メジャー。
おまえが知らんだけだ。
0572デフォルトの名無しさんNGNG
taskの終了とexitとは微妙に違うと思うな
0573デフォルトの名無しさんNGNG
釣り針マダー?
0574デフォルトの名無しさんNGNG
>>573
し
0575デフォルトの名無しさんNGNG
> taskの終了とexitとは微妙に違うと思うな

いいえ同じです
0576デフォルトの名無しさんNGNG
abort って exit ?
kill したら task 終了だけど exit ?

教えてえらい人
0577デフォルトの名無しさんNGNG
教えません
0578デフォルトの名無しさんNGNG
coreダンプ吐いて落ちるときもexit?
0579デフォルトの名無しさんNGNG
>>576
何を言ってるのかさっぱりだが
スレ違いなのは確かなようだ。
0580デフォルトの名無しさんNGNG
coreダンプは吐きません
coreなら吐きます
0581デフォルトの名無しさんNGNG
そんな揚げ足鳥はいいから
0582デフォルトの名無しさんNGNG
coreメモリイメージをダンプしたものだからcoreダンプでいいんでは
0583デフォルトの名無しさんNGNG
頭痛が痛いみたいな
0584デフォルトの名無しさんNGNG
ダンプを吐くのがおかしいってアゲアシトリだろ
0585デフォルトの名無しさんNGNG
アゲ厨に釣られるな
0586デフォルトの名無しさんNGNG
ところで、未だに秋葉原で「磁気コア」が売られているのは
一体どういう訳なのだろうか。

やっぱり未だに「需要がある」ということなのか?
0587デフォルトの名無しさんNGNG
8インチFDのデータが残ってるところもある(´д`)
0588デフォルトの名無しさんNGNG
実用的な記憶媒体としては意味無いけど、歴史的な記憶媒体を見てみたいとは思う。
高くないんだったら、真空管・トランジスタ・磁気コア・リレーとかの記憶媒体が欲しい。
中途半端に古い媒体は要らない。
0589デフォルトの名無しさんNGNG
>>588
ttp://www.fsinet.or.jp/~mad/relay.htm
ttp://www.protom.org/mad/relaycal.mpg
ttp://www.protom.org/mad/zentai.mpg
0590デフォルトの名無しさんNGNG
プログラムの実行速度を計測したいのですが、
time_t型の値を使ってtime();で秒数を代入しました。
time()の戻り値が整数のため
difftimeで差を求めると、ほとんどが「0秒」になってしまいます

プログラムの実行速度を求める方法で
良い方法はないでしょうか?
0591デフォルトの名無しさんNGNG
環境書け
0592デフォルトの名無しさんNGNG
>>590
環境と、今のソース貼ってみろ。な。
戻り値が整数なのは理由にならんよ。
0593590NGNG
>>591
FreeBSD5.2上です。
ご迷惑をおかけします。

$gcc -v
Using built-in specs.
Configured with: FreeBSD/i386 system compiler
Thread model: posix
gcc version 3.3.3 [FreeBSD] 20031106
0594デフォルトの名無しさんNGNG
ちなみに、VC++のtime_tは64bit整数(__int64)です。
0595デフォルトの名無しさんNGNG
gettimeofday
0596590NGNG
>>595
「gettimeofday」をキーワードにググったら
下記のサイトを見つけ、大変参考になりました
http://www.super-computing.org/sr8000/timer.html

皆様ありがとうございました。
0597デフォルトの名無しさんNGNG
> coreメモリイメージをダンプしたものだからcoreダンプでいいんでは

いいえ、coreをダウンしたファイルはcoreです
0598デフォルトの名無しさんNGNG
ダウン->ダンプ
0599デフォルトの名無しさんNGNG
> 実用的な記憶媒体としては意味無いけど、歴史的な記憶媒体を見てみたいとは思う。

うちでは大根おろし器にしてます > こあめもり
0600デフォルトの名無しさんNGNG
K&Rの5.11、P.145に載っているプログラムに

qsort((void **) lineptr, 0, nlines-1,
 (int (*)(void *,void *))(numeric ? numcmp : strcmp));

という文がありますが、この二行目は何をしているのでしょうか。
型キャスト?
0601デフォルトの名無しさんNGNG
「戻り値がintで、void*引数を二つとる関数」ポインタへのキャスト
三項演算子でqsortに渡す関数を選択してる


わかりにくッ
0602デフォルトの名無しさんNGNG
int (*fp)(void *, void *);
fp = numeric ? numcmp : strcmp;
のfpを使ってるだけ。これだと分かる?
0603600NGNG
>601-602
理解できました。ありがとうございました。
0604デフォルトの名無しさんNGNG
コアってメモリのことだろ(フェライトコア)。
0605デフォルトの名無しさんNGNG
忘年会の季節になると、
下北沢の駅や明大前の駅に、
よく落ちてます > core


find . -name core -delete
0606デフォルトの名無しさんNGNG
ttp://www.tdk.co.jp/tjdad01/dad00054.htm
0607デフォルトの名無しさんNGNG
>>604
>>586
0608デフォルトの名無しさんNGNG
解析木の論理的な構造について、
プログラム中で定義した構造体や変数との具体的な関係を説明せよ

という課題があるんですが、講義メモや教科書を読んでも良く分かりません
教えてもらえないでしょうか?
0609デフォルトの名無しさんNGNG
>>608
エスパーを探しているのか? そうか・・・

夏だな
0610デフォルトの名無しさんNGNG
>>608
こっちから課題を出そう。話はそれからだ。

レスの抽象的な質問について、
講義メモや教科書を読んで分からない点を具体的に説明せよ。
0611デフォルトの名無しさんNGNG
全部
0612C超初心者NGNG
お聞きしたいのですが
calloc関数で確保したメモリをfree関数で開放したのですが
その確認をしたい場合どうすればいいのでしょうか
0613デフォルトの名無しさんNGNG
>>612
かなり難しいと思う。
逆に解放していないことを確認する方が簡単。
0614デフォルトの名無しさんNGNG
課題2つ目

レスの質問について、
プログラムを見ないで、中で定義された構造体や変数などの関係を知る方法を具体的に説明せよ。
紙に書かれた10桁の数字を、紙を見ずに当てる方法でも構わない。
0615デフォルトの名無しさんNGNG
>>612
お前、超初心者とか言っておきながら、
実はベテランの釣り師だろ?
0616C超初心者NGNG
>>613

>>開放していない事を確認するほうが簡単。

とは、printf関数等で、%pにて表示すれば良いと言う事ですか?
0617デフォルトの名無しさんNGNG
>>616
簡単に言うとmalloc(calloc)した回数とfreeした回数を数えて
プログラム終了時にそれらの回数が一致していなかったら
freeし忘れたということが分かるとかそういう話。

質問の意味が、確実にfreeを実行したけど
解放されないことがあり得るかという意味なら通常はありえない。
0618デフォルトの名無しさんNGNG
freeしたらNULLを代入をするようにして、
NULLだったら解放済み。


ぐらいしか対処方法なくない?
0619デフォルトの名無しさんNGNG
>>613 >>617-618
お前等、親切な回答者のふりをしているが、
実は撒き餌だろ?
0620デフォルトの名無しさんNGNG
真相: 全員グル
0621デフォルトの名無しさんNGNG
>>619
何を言ってるのか分かりかねます;-(
0622C超初心者NGNG
>>617-618
え〜っと、 calloc関数で確保した領域があるわけじゃないですか。
その領域を開放するのがfree関数と自分は認識しているのですが、
その確保されている領域がfree関数を実行した後に、利用出来ると
思うのですが、領域が取られていない事を確認したいのですが
それは可能でしょうか?可能な場合、どのようなプログラムを
組んでいくと視認することが出来るでしょうか?
0623デフォルトの名無しさんNGNG
> その確保されている領域がfree関数を実行した後に、利用出来ると
これは、「freeした後の領域をそのまま使える」ということか?
0624デフォルトの名無しさんNGNG
利用しちゃいけません
0625デフォルトの名無しさんNGNG
>その確保されている領域がfree関数を実行した後に、利用出来ると
出来ません。利用できなくするのが free です。
他者が利用できるっていう話ならそう書いてください。
>領域が取られていない事を確認したい
文脈から「領域が取られる」の意味が読み取れません。
他者に取られるっていう話ならそう書いてください。

ちなみに他者に取られるかどうかは他者がいるかどうかですが
free したんならそんなこと気にしなさんなや。
0626デフォルトの名無しさんNGNG
>>622の「その確保されている領域がfree関数を実行した後に、利用出来ると思うのですが」はまたcallocすればってことじゃないのか?
0627デフォルトの名無しさんNGNG
>>621-625
もう俺は騙されないぞ!
0628デフォルトの名無しさんNGNG
真相: 漏れは可愛い女の子
0629デフォルトの名無しさんNGNG
>>622
ヒープの利用状況を視認する機能を持ったヒープマネージャを作って、
calloc/free の代わりにそっちを使えばおけ。
0630デフォルトの名無しさんNGNG
藻前ら、ハンドルが語っているじゃないか。

>C超初心者
初心から始めるわけだから、超えたということは既に初心者ではないのだろうよ。
0631デフォルトの名無しさんNGNG
どっちの方向に超えたかが問題な訳だが
0632デフォルトの名無しさんNGNG
たぶん左斜め上45度くらいかな。
0633デフォルトの名無しさんNGNG
なんの目的でそれを確認したいのか書かないと
話が見えてこないな
0634C超初心者NGNG
>>623-626 >>629 >>633

あらかじデータの件数を取得し、その分だけmalloc関数
(またはcalloc関数)を用いてメモリを確保してから入力し、
それぞれ出力しなさい。また、入力において名前が空であった場合は、
そこで入力、及び出力を終了するようにしなさい。
終了時にメモリを開放していることを確認しなさい。

と、言う課題をしています。今、試しているのが下記のソースなんですが、
struct meibo {
char name[21];
char address[129];
char birth[11];
char phone[17];
}list;
int main( int argc , char *argv[] )
{
/* 変数宣言 */
struct meibo *pt;
/* メモリ領域確保 */
pt = ( struct meibo * )malloc( sizeof( struct meibo ) );
/* デバック用(解放前) */
printf( "Before!\nsize : [%d] address : [%p]\n\n" , sizeof( *p ) , p );
/* メモリ領域開放 */
free( pt );
/* デバック用(解放後) */
printf( "After!!\nsize : [%d] address : [%p]\n\n" , sizeof( *p ) , p );
}
開放の前後で同じ表示がされてしまいます。
0635C超初心者NGNG
>>634

すいません printfで呼んでいる p 及び *p は ptの間違えです
0636デフォルトの名無しさんNGNG
free(pt); で pt が変更されたら大変だな。
0637デフォルトの名無しさんNGNG
pt変わらないよ
あと、list使ってないじゃん
0638デフォルトの名無しさんNGNG
>開放の前後で同じ表示がされてしまいます。
当たり前だろ。ローカルに取ってある値なんだから。

>終了時にメモリを開放していることを確認しなさい。

きちんとメモリを解放する処理を入れたかどうか
ソースを良く見て確認してから提出しなさいちう意味にも読めるな
0639デフォルトの名無しさんNGNG
釣りか
0640C超初心者NGNG
>>636-638

皆さんありがとうございました。
この問題に関して無事解決致しました。

分かりやすい回答ありがとうございます
0641デフォルトの名無しさんNGNG
なぜC言語は難しい難しいと言われるのでしょうか
先入観?
0642デフォルトの名無しさんNGNG
言語仕様駆使しようとすると えてして記号だらけになるから
0643デフォルトの名無しさんNGNG
>>641
むずかしいと言った奴に訊いてくれ
0644デフォルトの名無しさんNGNG
>>641
「ポインタが解らん!」と言う人が多い。
しかし、そーゆー人はポインタ以外も解ってなかったりするので
実際のところは >>640。
0645デフォルトの名無しさんNGNG
プログラミング言語自体が難しいから
んで
javascript での「わーいマウス持ってったら画像が変わったー簡単だね」みたいなのと比べてるから
0646デフォルトの名無しさんNGNG
>>641
C ってのは、アセンブラ使えることが前提だから。
0647デフォルトの名無しさんNGNG
strlenなど失敗時に何々を返すって書いてない関数って
失敗しないのが前提なんでしょうけど、もし失敗しやがったら
そのプログラム上からは成す術無しなんですか?
0648デフォルトの名無しさんNGNG
失敗するときは、OSとかそういうレベルの問題だから。
0649デフォルトの名無しさんNGNG
>>647
でも、仮に exit() に「失敗しますた(^_^;)」って
言ってこられても対処に困るだろ?
0650デフォルトの名無しさんNGNG
exit()の中の人はマァヴなんですか?
0651デフォルトの名無しさんNGNG
>>647
strlenなら例えばこんな実装だろうけどヌル終端の正しい文字列を引数に渡す限り、
どこかで問題がおきることはないと思うけどもしエラーが起きるとしたらどこだ?
size_t strlen(char *s)
{
 size_t i = 0;
 while (s[i] != '\0')
  i++;
 return i;
}
0652デフォルトの名無しさんNGNG
中の人などいない
0653デフォルトの名無しさんNGNG
>>651
色々あると思うが・・・

i = 0; <-初期化に失敗する
while (s[i] != '\0') <-比較を間違える
i++; <- インクリメントを忘れる
return i; <- i と間違えて s を返す
0654デフォルトの名無しさんNGNG
>>653
そういうのはバグとして修正できるだろ。
0655デフォルトの名無しさんNGNG
>>653
初期化失敗はまだしも、あとはちょっとテストするだけで分かるはず。
0656デフォルトの名無しさんNGNG
>>654
いや、たまには実行時にプロセッサが
間違うこともあるだろ?
0657デフォルトの名無しさんNGNG
マルチプロセス/スレッドの切替に間違うとか。
0658デフォルトの名無しさんNGNG
そんなことより、sのNULLチェックしろよ。
0659デフォルトの名無しさんNGNG
いや、strlenみたいな「軽くあるべき」関数が
毎回ぬるぽチェックをするのはどうかな。
例えば、fclose(NULL)は成功して欲しいし
free(NULL)は無事に戻って来ないといけないんだけどさ。

で、strlenがぬるぽチェックしてないと
NULLを渡したときに失敗する(=戻ってこない)環境が殆どだと思うけど
それはそれでかまわないと俺は思うんだけど。
0660デフォルトの名無しさんNGNG
(1) ヌルポインターをキャストするのってどう思いますか?
foo = (HOGE *)NULL; みたいに

(2) ヌルポインターの代わりに0って書いてもいいんですか?
0661デフォルトの名無しさんNGNG
> 終了時にメモリを開放していることを確認しなさい。

漢字ぐらいちゃんと書けよ ぼけ
0662デフォルトの名無しさんNGNG
>>660

ヌルじゃなくてナルだろぼけ
0663デフォルトの名無しさんNGNG
ヌルだろ
0664デフォルトの名無しさんNGNG
おい、おまえら、そういう話題をしてると日下部がくるぞ!
0665デフォルトの名無しさんNGNG
>>664
夜、口笛をふくとどろうぼうが来ますよ! と同じレベルか?
0666デフォルトの名無しさんNGNG
どういう関連だよ!
0667デフォルトの名無しさんNGNG
古代朝鮮語では「ナル」には太陽と日の両方の意味がある。ナもナルも同じ意味。
また、ニハは古代朝鮮語で「門・口・出口」等の意味があり、
ナニハは「日ノ出・日の門」となり日の出る聖なる場所を意味することとなる。

新羅第17代奈勿(ナル)は太陽王の意味である。

また、ナニハのナは古代朝鮮語で「生成」の意味を持つ。
(この名残が大阪市西成区・東成区として今に残る)
これらのことから大和岩雄氏はナニハの地名を
“太陽の光の降り注ぐ水辺の生成の土地”と解釈した。
つまり迎日祭祀の場所で、日庭であると説く。
大和氏は三国遺事の迎日祭祀の場所が都祈野と書かれていることと
難波の都祈野(ときの)との関連に注目する。

http://www003.upp.so-net.ne.jp/kodaisi/right-kusaka.htm
0668デフォルトの名無しさんNGNG
風邪をひいてもオッケー。カモーン!

みたいな関連だな。





ごめん。苦しすぎた。
0669デフォルトの名無しさんNGNG
今の大阪あたりは、4世紀ごろは、クサカ(草香)と呼ばれてた。
しかも、そこは、ひのもと(日下)の国(日の出ずるところの意味)であるから、
他の草香と区別するため、「日下(ひのもと)の草香(くさか)」と呼ばれていた。
現在でも「日下」と書いて「くさか」と読むのは、
「春日(はるのひ)のかすが」や「とぶとりのあすか」と同様である。

日本という呼び名は、弥生時代に平和に過ごしていた今の大阪あたりの人たちの国名(ひのもと)だったのを蘇我馬子により、蘇我氏が建国した国は、
真に倭人の国という意味で「日本(日本語読みでニホン、中国語読みでジベン)」と提案され対中国に対して使ったが、蘇我氏の滅亡とともに使われなくなった。
100年を経て、持統天皇・文武天皇のときに、改めて倭国を「日本(ニホン)」と呼ぶように決めた

http://www.eonet.ne.jp/〜ombudsman/kusakabeke04-kojiki.htm
0670デフォルトの名無しさんNGNG
という関連だ。
0671デフォルトの名無しさんNGNG
~を〜と(ry
0672デフォルトの名無しさんNGNG
そんな関連持ち出すまでもなく、

void
a. 1 役に立たない; 【法】 無効の; 無効にできる.
2 空(から)の、空(くう)な、中空の、空虚な; (家・土地など)空いている; 無い、欠けた;
n 無いこと、欠如; [the 〜] 虚空、真空、宇(宙); 隙間、空所、空隙; 空虚な感じ;
vt 空にする; 放出する,無効にする、取り消す;

null
a. 1 無効な、拘束力のない; 無益な; 価値のない、無意味な; 特徴[個性]のない.
2 存在しない; 【数】 ゼロの、零の、 《計器の》零位法の; 零位調整の.
n. 零、ゼロ; 《計器などの》零の目盛り、零度; 【通信】 《受信機の》零位;
vt. ゼロにする.

明白な関連だろ ;-)
0673デフォルトの名無しさんNGNG
> > ヌルじゃなくてナルだろぼけ
> 新羅第17代奈勿(ナル)は太陽王の意味である。

そういえば、日本の皇太子も「ナルちゃん」だよね? いま
0674デフォルトの名無しさんNGNG
つまり、
ナル==void==朝鮮人==西成区==天皇家に近い==日下部 ってこと?
0675デフォルトの名無しさんNGNG
>>660
(void *)型をキャストすんなっつってんだろ ぼけ
0676デフォルトの名無しさんNGNG
プログラム板で「ぼけ」という言葉を多様する人が約一名いるが
語調があまりにいつも同じなので同一人物ってすぐわかるなw
0677デフォルトの名無しさんNGNG
そうだな ぼけ
0678デフォルトの名無しさんNGNG































0679デフォルトの名無しさんNGNG
> 「ぼけ」という言葉を多様する人が約一名いるが
漢字ぐらいちゃんと書けよ ぼけ
というようにこのキャラは複数人が演じてる
0680679NGNG
空改行忘れたわ
0681デフォルトの名無しさんNGNG































0682デフォルトの名無しさんNGNG
C の開発者の一人であるデニス・ホッパー博士って、
アメリカ人ですか? それとも他の国の人ですか?
0683デフォルトの名無しさんNGNG
お前の嫌いな韓国人
0684デフォルトの名無しさんNGNG
RECT rc = { 0, 0, 1, 1 };
みたいな書き方ってRECTの定義の変更にめちゃくちゃ弱くないですか?
0685デフォルトの名無しさんNGNG
>>684
メンバを後ろに追加していけば、とりあえず問題はおきない。
0686デフォルトの名無しさんNGNG
そこで C99 ですよ。

RECT rc = { .left = 0, .top = 0, .right = 1, .bottom = 1 };
0687デフォルトの名無しさんNGNG
ダサッ
0688デフォルトの名無しさんNGNG
>>684
そもそもそういう初期化を多用するのがヤバい。
0689デフォルトの名無しさんNGNG
>>688
じゃ、どうやって初期化すんの?
0690デフォルトの名無しさんNGNG
NULLとNULってなんなんだあqwせdrftgyふじこ
0691デフォルトの名無しさんNGNG
リッチーだろ ぼけ
0692デフォルトの名無しさんNGNG
char const *p;
と
const char *p;
の違いについて教えて下さいまし
0693デフォルトの名無しさんNGNG
>NULLとNUL

使い分けろ、アドレスとしての0と単なる数値の0
0694デフォルトの名無しさんNGNG
そもそもNULは定義されてない場合がある
0695デフォルトの名無しさんNGNG
>693
ハァ?
0696デフォルトの名無しさんNGNG
>>692
ない
0697デフォルトの名無しさんNGNG
文字コードの\0のことは
nulと小文字にするか、カタカナでナルと書け。
0698デフォルトの名無しさんNGNG
>>692
↑p は変更できるが *p は変更できない
↓*p は変更できるが p は変更できない
0699デフォルトの名無しさんNGNG
>>698
逆じゃないか?
0700デフォルトの名無しさんNGNG
>>698
それは、
char const *p;
char * const p;
の場合じゃない?
0701デフォルトの名無しさんNGNG
またfuckか
0702デフォルトの名無しさんNGNG
>>698
char *const と勘違いしてないか?
0703デフォルトの名無しさんNGNG
>>700>>702
うん、見間違えてたスマン

ほんとの事言うと、知識が足りなかったスマソ
0704デフォルトの名無しさんNGNG
int *p派の人に質問です。
typedef int* IPもtypedef int *IPと書く方ですか? 
0705デフォルトの名無しさんNGNG
うん。
0706704NGNG
>>705
ご丁寧に、ありがとうございました
0707デフォルトの名無しさんNGNG
>>704
struct{} とかの定義だと顕著かな?
WinAPI のヘッダ覗くと大体 int *IP のほうを使ってる
0708デフォルトの名無しさんNGNG
スタイルネタはこっちでやれ
http://pc5.2ch.net/test/read.cgi/prog/1086146814/
0709デフォルトの名無しさんNGNG
for(;;)とwhile(1)ってどちらが早いですか?
forはインクリメントがどうのこうのとかで微妙に遅くなるとかならないとか
聞いたんですが分かる人おりますか?
0710デフォルトの名無しさんNGNG
>709
都市伝説
0711デフォルトの名無しさんNGNG
>>709
gotoがまじですごいらしいよ
0712デフォルトの名無しさんNGNG
while(0) がマジで速いよ
0713デフォルトの名無しさんNGNG
>709
誰から?
0714デフォルトの名無しさんNGNG
>>709
どっちも大差ない
0715デフォルトの名無しさんNGNG
あーあ
0716デフォルトの名無しさんNGNG
>714
「差」(w
0717デフォルトの名無しさんNGNG
>709
実はdo while(1);が最速
0718デフォルトの名無しさんNGNG
longjmpは遅いかも
0719デフォルトの名無しさんNGNG
const っていつから ANSI-C に入ったんだっけ?
0720デフォルトの名無しさんNGNG
ANSIでCの規格が制定されたときから。

正確には、ドラフト案が出た段階で
関数プロトタイプやvoidなどと共に導入が提案されていたはず。
0721デフォルトの名無しさんNGNG
すげーなこんなんでも釣れるのか
0722デフォルトの名無しさんNGNG
いまどきANSI-C...
0723デフォルトの名無しさんNGNG
Fedora Core 2で、こんなプログラム(hoge.c)を記述しました
/*** ここから ***/
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[]){
char *str = (char *)malloc(100);
char *argstr = (char *)malloc(100);
if (str == NULL || argstr == NULL) {
sprintf(stderr,"Memory Allocation Error!\n");
exit (1);
}
if (argv[1]==NULL){
printf("str>");
scanf("%s",argstr);
}else strcpy(argstr,argv[1]);
str = getenv(argstr);
printf("STR:%s\n",str);
free (str);free(argstr);
exit (0);
}
/*** ここまで ***/
(続く
0724デフォルトの名無しさんNGNG
$ gcc hoge.c
$ hoge=a ./a.out hoge
STR:a
$ hoge=a ./a.out
str>hoge
STR:a

ここまではいいんですが

$ a=a ./a.out a
STR:a
free(): invalid pointer 0xfefb45be!
$ a=a ./a.out
str>a
STR:a
セグメンテーション違反です

なにがわるいんでしょうか
変数にaaaaを使うとaを使った場合と同じになります。abcdを使うとhogeの場合と同じになり、bbbbだと、これもhogeの場合と同じになります。

分っている範囲でおかしくなる条件
・a=a
・aaaa=a
正しく実行される条件
・hoge=a
・abcd=a
・bbbb=a

よろしくです
0725723-724NGNG
XMODIFIERS,WMAKER_BIN_NAMEを指定した場合も駄目(invalid pointer,SegV)なようです。
0726デフォルトの名無しさんNGNG
str = getenv(argstr); // ここでstrがgetenvの戻り値に書き換えられる
free (str);free(argstr); // 何解放してんだ
0727723-724NGNG
>>726
どうもです。解放しないようにすると正しく実行されましたが,どこで解放するのが正しかったのでしょうか。
0728デフォルトの名無しさんNGNG
>>727
そもそもstrはgetenvの戻り値を入れるだけだからmallocする必要も無い。
となるとprintfで出力するときしか使っていないから、直接printf("STR:%s\n", getenv(argstr));と書けばいい。
つまり変数str自体要らない。
0729デフォルトの名無しさんNGNG
str = getenv(argstr);
printf("STR:%s\n",str);
free (str);free(argstr);
exit (0);
}

strに確保した領域使ってないじゃん。

char *str; /* mallocは消す */
free (argstr); /* free(str);は消す */
0730デフォルトの名無しさんNGNG
> セグメンテーション違反です
> なにがわるいんでしょうか

scanf使っているから
0731デフォルトの名無しさんNGNG
こういうボケな質問するやつはたいがいscanfつかってるなあ。やはり
0732デフォルトの名無しさんNGNG































0733デフォルトの名無しさんNGNG
プロトタイプ宣言で
void (*signal(int sig, void (*func)(int)))(int);
となっているんですが、どうしてもこれが理解できません・・・
お力をお貸し下さい。

0734デフォルトの名無しさんNGNG
http://www.google.co.jp/search?q=signal+typedef&ie=UTF-8&hl=ja&lr=lang_ja

ところで、
typedef long LONG;
unsigned LONG var;
みたいな使い方って合法?
0735デフォルトの名無しさんNGNG
合法
0736デフォルトの名無しさんNGNG
>>735
いいえ
0737デフォルトの名無しさんNGNG
> どうしてもこれが理解できません・・・

「どうしても」ってことは、おれが説明してもってことだ。
だから説明しても無駄なので、しないぞ。

「どうしても」ってのは、ほんとうにすべてのかぎりを尽くしたとにだけ言えよぼけ
0738デフォルトの名無しさんNGNG
何にもしないやつほど「どうしても」とか言うぞ
0739733NGNG
すみません・・・「どうしても」は撤回します・・・
0740デフォルトの名無しさんNGNG
「関数ポインタ」+適当な単語でぐぐるといいよ。
あとは何も聞くことは無いはず
0741デフォルトの名無しさんNGNG
問)「どうしても」を使った短文を作りなさい
答)「かんどうしてもよいです」
0742733NGNG
>>740
誠にありがとうございます!!
0743デフォルトの名無しさんNGNG
解答例2:
Undoしてもとにもどらない!
0744デフォルトの名無しさんNGNG
( ´,_ゝ`)プッ
0745デフォルトの名無しさんNGNG
> 誠にありがとうございます

・・・・・・・・・・・・・・・

0746デフォルトの名無しさんNGNG
ほかになにもいうことはなーいー
0747デフォルトの名無しさんNGNG
ただのアホは寝てろ
0748デフォルトの名無しさんNGNG
特殊なアホは起きてろ
0749デフォルトの名無しさんNGNG































0750初心者NGNG
初歩的な質問かもしれませんが、
char型の配列について、
配列の数を大きくすると宣言できなくなってしまいます。
char a[1000]ならプログラムが動くのに、
char a[500000]にすると動きません。

メモリの関係で大きな数の配列は無理なのでしょうか。
解決法があれば教えてくれると助かります。
0751デフォルトの名無しさんNGNG
スタックにあまり大きなものを置いちゃだめ。
0752デフォルトの名無しさんNGNG
750はぼけ厨と同一人物
0753デフォルトの名無しさんNGNG
>>733
typedef void *PFUNC(int);
PFUNC signal(int sig, PFUNC func);
これと同じ。関数へのポインタを2つ目の引数に取って戻り値の型も関数へのポインタ。
0754デフォルトの名無しさんNGNG
>>753
typedef void (*PFUNC)(int); ではないだろうか。
0755デフォルトの名無しさんNGNG
typedef に逃げるデメリットがモロに出てるな
若者たちよ、こいつらは悪い手本だぞ
0756デフォルトの名無しさんNGNG
>>750
一応マジレスしとくと、malloc() 使いなさい。
0757デフォルトの名無しさんNGNG
751はアホ。
「宣言できない」だからスタック上ほげほげの問題じゃあないだろう。
intが16bitな処理系でa[500000]は無理なのはあたりまえだろぼけ
0758デフォルトの名無しさんNGNG
757=750
やっぱり750はぼけ厨か。
0759デフォルトの名無しさんNGNG
>>757
ひとつ言っておく

extern int a[]; /* これは宣言 */

int a[1000]; /* これは定義 */
0760デフォルトの名無しさんNGNG
すげぇな>>757って。
勝手に思い込んで決め付けるタイプだな。
0761デフォルトの名無しさんNGNG
8bitコンパイラの可能性を見落としているところが757の能力的限界だな。
0762デフォルトの名無しさんNGNG
BDS C か!
0763デフォルトの名無しさんNGNG
MAKELONGとかのマクロ(古くはfarポインタ生成マクロ等)で
上位と下位を加えるのに+ではなく|を使ってるのって
不要な繰り上がり計算をさせないためだったんだ。
今初めて気がついた。
0764デフォルトの名無しさんNGNG
>>763
違う
0765デフォルトの名無しさんNGNG
>>761
> char a[1000]ならプログラムが動くのに、
8bitではないらしい
0766デフォルトの名無しさんNGNG
>764
では何故?
0767デフォルトの名無しさんNGNG
>>763
違う。
unsigned にキャストするより短いから。
0768デフォルトの名無しさんNGNG
余計意味が分かりません。
何が短いのでしょうか。
0769デフォルトの名無しさんNGNG
コードの長さじゃないのか?
0770デフォルトの名無しさんNGNG
767みたいなアホは放置
ビット演算は論理演算が基本ってことで納得しとけ
0771デフォルトの名無しさんNGNG
??
|を使うとunsignedにキャストするよりコードが長くなる?
+を使うとunsignedにキャストしなくてはいけない??

もちろん>763では
定数以外で「+」を使うと、キャリーの加算が別途必要だから
「|」よりコードが長くなる(可能性がある)という意図で書いたんだけどさ。
16bit環境で32bit値を生成、あるいは32bit環境で64bit値を生成するときの話ね。
32bit環境で32bit値を合成するなら+も|も一緒だから。

MAKELONGLONGを自分で書こうとしてふと思っただけ。
多くの人は昔から気づいていただろうし。
0772デフォルトの名無しさんNGNG
void aaa(int[][10])
{
/* 略 */
}

関数の引数を2次元配列にする時だけ1番目の要素を省略できるのは何故ですか?
それと、2番目はどうして省略できないのでしょうか?
また1番目は省略しておくと要素数が変わっても対応できますか?
通常は省略するものなのでしょうか?
質問多くてすいませんがどなたか教えてくださいm(_ _)m
0773デフォルトの名無しさんNGNG
>>772
void aaa(int hoge[][10])
の場合、hoge[2][5]は*(hoge + 10 * 2 + 5)と書き換えられる。この中の10というのはもちろん2番目のの要素数。
2番目以降の要素数を省略できることにするとこの10と言う2番目の要素数も引数として受け取らなければならなくなるから。
(C99ではそこんところを明示的に引数にしてvoid aaa(unsigned num, int [][num]);のような記述が可能)

そして要素数の1番目は省略するのが普通。
0774デフォルトの名無しさんNGNG
>>773
どうもありがとうございます。m(_ _)m
参考にさせていただきます。
0775デフォルトの名無しさんNGNG
そんなの使うなよ
0776デフォルトの名無しさんNGNG
教えてください。
今、strcpyの機能をmain関数内でやろうとしてみたんですが全く下のプログラムじゃ
結果ぬるになります。
26からのプログラミングは前途多難ですね。お願いします。

void main(){
char a[64],b[64];
char *c;

printf("つなげられる文字列入力-->");
scanf("%s",&a);
printf("\nつなげる文字列入力-->");
scanf("%s",&b);

int i;

for(i=0;a[i] == '\0';i++)
(*c)+=a[i];
for(i=0;b[i] == '\0';i++)
(*c)+=b[i];

printf("結果表示\n%s\n%s\n%s\n",a,b,*c);
}
0777デフォルトの名無しさんNGNG
>>776
いろいろ突っ込みどころはあるが、
とりあえず、
お前は scanf を使うのをやめた方がいい。
0778776NGNG
scanf以外だとgetなんとかってやつですか?
まだそこまで勉強進んでないんです。
っつーか、つっこみどころいっぱいあるんだったら
一からやり直してみます

すみませんでした
0779デフォルトの名無しさんNGNG
void main(){ // あえてつっこまない方向で
char a[64],b[64];
char *c; // これポインタ

printf("つなげられる文字列入力-->");
scanf("%s",&a); // ここでは無駄につっこまれるので、fgets(a, sizeof(a), stdin);で
printf("\nつなげる文字列入力-->");
scanf("%s",&b); // aと同じ

int i;

for(i=0;a[i] == '\0';i++)
(*c)+=a[i]; // cはポインタでどこを指してる?−不定値です。
for(i=0;b[i] == '\0';i++)
(*c)+=b[i];

printf("結果表示\n%s\n%s\n%s\n",a,b,*c);
}
0780デフォルトの名無しさんNGNG
>>776
一応できるだけ君のコードを尊重した上でマジレスすると、

c に値入ってないのに (*c) とは何事?
せめて、
char d[128];
char *c = d;
くらいにしとけ。

さらに (*c) に += し続けても文字列の結合にはならない。

それに、
printf("結果表示\n%s\n%s\n%s\n",a,b,*c);
じゃなくて
printf("結果表示\n%s\n%s\n%s\n",a,b,c);

あと、
scanf("%s",&a);
じゃなくて
scanf("%63s",a);
0781776NGNG
なんか間違いだらけなんですね。
かなりはずかしいコードを晒したんですね。

しかし勉強になります。
周りにプログラミングやってる人いないので。

さらに質問なんですけど>>779さんのfgets(a,sizeof(a),stdin);はググって解ったんですけど
>>780さんの
scanf("%63s",a);
の %63s ってどういうことですか?
0782デフォルトの名無しさんNGNG
>>781
あー、scanf使うなって言われてるんだから、fgetsでいいんじゃない?
なぜscanfが駄目なのかは自分で調べて味噌
0783776NGNG
猫でもわかる〜でもscanfってなんだっけ?的な発言ありましたしね。
まだまだ俺のレベルじゃstrcpyの真似はできないと悟りました。

基本情報技術者受けようと思ってたけどやめときます
0784デフォルトの名無しさんNGNG
>>781
a[64]ってあるから
aに入る最大の文字数を63としてる。
0785デフォルトの名無しさんNGNG
scanfして、AAA[半角スペース]BBB[半角スペース]CCCって
入力してみ。
0786デフォルトの名無しさんNGNG
>>781
調べるのはいいが、はじめから「だめ」って先入観は捨ててドライに論考しろ
それが科学者とごっこの境だ
0787デフォルトの名無しさんNGNG
>>783
猫でもわかるとか読んでないで本買え。
0788デフォルトの名無しさんNGNG
猫でも分かるんだぞ!!!
0789デフォルトの名無しさんNGNG
まず、どの猫でもいいから、そのHPを見てC言語を理解した猫をうpして欲しいw
0790デフォルトの名無しさんNGNG
猫でもわかるって分かりやすいのか?
メリハリなく、だらだら書かれてるだけって感じ。
コードもかなり下手だし。
0791デフォルトの名無しさんNGNG
「猫撫で声」「猫をかぶる」etc

ほら、脊椎動物亜門 哺乳綱 ネコ目 ネコ科の動物である必要はない!
0792776NGNG
785さんの言うとおり入力テストしようと思い下記を確かめました。
言いたいことが解りました。
でもfgetsとscanfの順番を逆にしたら入力がscanfだけしか受け付けなくなってしまいました。
どういうことでしょうか?

#include <stdio.h>
main(){
char a[64],b[64];
printf("文字だ、文字を入れろ-->");
fgets(a, sizeof(a), stdin);
printf("もう一回文字だ、文字を入れろ-->");
scanf("%63s",&b);
printf("\n\n1:%s",a);
printf("\n2:%s",b);
return 0;
}

ちなみに、オーム社のCの本買ったけど今、構造体のネストでつまずいております。
0793デフォルトの名無しさんNGNG
>ちなみに、オーム社のCの本買ったけど今、構造体のネストでつまずいております。

分からないところは飛ばして進めば?
0794デフォルトの名無しさんNGNG
>>790
小学校の授業に積分が出てこないのをレベル低いって言ってるようなものだなw
0795デフォルトの名無しさんNGNG
>>794
初心者向けだからダメだと言ってるわけじゃない。
0796デフォルトの名無しさんNGNG
>>794
>小学校の授業に積分が出てこないのをレベル低いって言ってるようなものだなw

そう言ってるようには見えないが。
0797デフォルトの名無しさんNGNG
>>796
こちらへどうぞ
http://pc5.2ch.net/test/read.cgi/tech/1090324689/
0798デフォルトの名無しさんNGNG
猫でもわかるが持ち上げられてるコミュニティーって、だいたい初心者向けの
ところだけど、最近2chでも「猫でもわかるをみろ」みたいなカキコが目に付く
ようになってきたな。
0799デフォルトの名無しさんNGNG
>>798
初心者向けのスレしか見ないようになったのでは?
0800デフォルトの名無しさんNGNG
794の言ってることは
激しく的外れだなw
0801デフォルトの名無しさんNGNG
よっぽど悔しかったんだねw
0802デフォルトの名無しさんNGNG
猫でもわかる敷居が低いとは思うよ。
あのサイトを1から順にこなしていけば、
ざっくりとした雰囲気はつかめるっしょ。
そういうサイトが他にはないと思うんだな。
0803デフォルトの名無しさんNGNG
>>792
最初に、scanf関数ってのは書き込む変数に対してのポインタを渡すもの
scanf("%63s",&b); のbは本来配列名だけど、インデックスを省くとその配列の先頭へのポインタを示すことになるから'&'は付けなくていいよ。

それはさておき、*gets関数はバッファに改行(\n)が現れるまで文字を読み込む。だから途中に何があろうが無視して変数へ格納していく。
それに対し*scanf関数は何もしなければバッファにホワイトスペース(スペースやタブのこと)が現れた時点で読み込むのを止めちゃう。

今回の例でいうと、最初のscanf()でスペース入りの文字列を入力したからAAAまでがaに格納される。
次のfgets()の時はバッファ(stdin)に先ほど読み込まれなかったBBB CCC\nが残っているので、それをユーザの入力よりも先にbに格納する。
というような流れで動くんだよね。こんな説明でわかってもらえた?
0804デフォルトの名無しさんNGNG
猫でもが高く評価されているのは、"WIN32SDK"に関してだな。
"C/C++"に関しては、他にもサイト/書籍が豊富だから傑出しているわけでは無いが、俺達よりはレベル高いな。
0805デフォルトの名無しさんNGNG
>>804
少なくともおまへはレベル低い
0806デフォルトの名無しさんNGNG
?:演算子の使い方教えてください。
または、記号を具ぐる方法教えてください。
それと、小さい方を返す演算子ってありますか?
副作用についても教えてください。
簡単にでいいです。
キーワードわかれば具繰りmass。
よろ。
0807デフォルトの名無しさんNGNG
>>806
これと
int a,b;
if(a<0) b=-1;
else b=1;

これが
int a,b;
b=(a<0 ? -1:1);

等価。
0808デフォルトの名無しさんNGNG
「google 記号を検索」でgoogle検索。
そのあと「三項演算子」でgoogle検索。
0809デフォルトの名無しさんNGNG
if( a<b ) min=a ; else min=b ;
min = a<b ? a : b ;

副作用は無い。
0810デフォルトの名無しさんNGNG
ここは厨の質問に専門学校生が答えるスレだから、レベルの高低とは無縁の世界。
0811デフォルトの名無しさんNGNG
>>807-809
お前らすごいですね。
すげーたすかります。
サンクスコ!
0812デフォルトの名無しさんNGNG
>ここは厨の質問に専門学校生が答えるスレ
逆だろ。
0813デフォルトの名無しさんNGNG
enum hoge
{
LESS=-1,
EQUAL,
MORE,
};
int a,b,c;
a=5;b=1;
c=a<=b ? a<b ? MORE:EQUAL:LESS;
0814デフォルトの名無しさんNGNG
>>806
「副作用」って用語がどういう意味かわかって使っているか?
0815デフォルトの魚釣りさんNGNG
>>806じゃないんですが、
薬の副作用とは違うんですか?
0816デフォルトの名無しさんNGNG
>>809
「副作用」って用語がどういう意味かわかって使っているか?
0817デフォルトの名無しさんNGNG
>>816
0818デフォルトの名無しさんNGNG
#define A AAAA

int _tmain(int argc, _TCHAR* argv[])
{
printf ( "%s", A );
return 0;
}
このプログラムでコンソールに文字列としてAAAAを表示させるにはどうすれば良いですか?
どうしても良い方法が思いつきません。
(#define A "AAAA"はなし)
0819デフォルトの名無しさんNGNG
すみません、これのどこがまずいでしょうか?

/* 各部屋の寸法から、家屋の床面積を計算するプログラム */

#include <stdio.h>

int main(void)
{
int num, i, length, width, space;

printf("部屋の数はいくつですか : ");
scanf("d%", &num);

space = 0;

for(i=1; i!=num; i++)
{
printf("%d番目の部屋の寸法を入力してください\n", i);

printf("縦 : ");
scanf("%d", &length);

printf("横 : ");
scanf("%d", &width);

space = length * width;
}

printf("家屋の総床面積は%dです", space);

return 0;
}
0820デフォルトの名無しさんNGNG
>>818
どうしようもない

>>819
d%
0821デフォルトの名無しさんNGNG
d%
i!=num
0822デフォルトの名無しさんNGNG
今木がついた。
日本人ってヲタだったんだ。
0823822NGNG
スマソ
誤爆した。
0824デフォルトの名無しさんNGNG
>>823
勝手にフォローすんなよ。
まぢで気がついたし。
0825819NGNG
d%あっ(;;´Д`)~~
修正しました。ありがとうございます。

しかしまだ問題が…
部屋数が多くてもspaceが加算されていかない…

それと、条件判定部がいまいち理解できないのですが、
i=1からi==numまでi++するとなると

for(i=1; i!=num; i++)じゃなぜまずいのでしょうか?
例えば2!=2は偽なのでforループから抜け出るはずなのですが、抜けでないです…
i<num+1では問題ないのですが、納得できない…。
0826デフォルトの名無しさんNGNG
>>825
<=を知っているか?
0827818NGNG
>>820
どうしようもないんですか・・・・
本当の本当に不可能なんでしょうか?
何か名案はないでしょうか?

#define A AAAA

でAAAAを文字列として表示したいだけなのですが・・・
0828デフォルトの名無しさんNGNG
>space = length * width;
0829819NGNG
>>826

あ、
i<=num
でも大丈夫ですね。
0830デフォルトの名無しさんNGNG
>>827
それをすることにどんな意味がある?
"AAAA"では駄目な理由は何なのか?
0831デフォルトの名無しさんNGNG
>>827
無理。
文字列にするための#はマクロの引数にしか使えないし。
0832デフォルトの名無しさんNGNG
>(#define A "AAAA"はなし)
C言語はお前等の母親ではない(利根川
不合理なことをなんでもかんでもサポートするほど甘くは無い
0833818NGNG
>> 830
ただ単にですね
AAAAは関数名なんですよ。#defineで切り替えて呼び出す関数を変える。
デバッグのためにその関数名を表示したいんですが無理なんですかねぇ・・・
0834819NGNG
>>828

あ、
space = space + length * width;
ですね。

とりあえず、問題なく動作するようになりました!ありがとうございます。
あとは、i!=numじゃなぜまずいのか、納得のいけば良いのですが…。
0835デフォルトの名無しさんNGNG
>>825
>for(i=1; i!=num; i++)じゃなぜまずいのでしょうか?

num=0の場合を考えてみよう
0836819NGNG
num=0の場合だと、永久にループから抜け出さないのは、一応分かります。
が、他の数字の場合でも、ループから抜け出さないプログラムになってしまうんです。
それはなぜなんでしょう?
あと、書くとすればi!=num+1ですね。
0837819NGNG
ああ(;;´Д`)~~
i!=num+1
でも、これなら問題ないですね。ありがとうございました…。
0838デフォルトの名無しさんNGNG
今どうなっとんねんもっかいソース貼れ
0839819NGNG
一応、こうなりました。とりあえず、無事動いているみたいです。。

/* 各部屋の寸法から、家屋の床面積を計算するプログラム */

#include <stdio.h>

int main(void)
{
int num, i, length, width, space;

printf("部屋の数はいくつですか : ");
scanf("%d", &num);

space = 0;

for(i=1; i!=num+1; i++)
{
printf("%d番目の部屋の寸法を入力してください\n", i);

printf("縦 : ");
scanf("%d", &length);

printf("横 : ");
scanf("%d", &width);

space = space + length * width;
}

printf("家屋の総床面積は%dです\n", space);

return 0;
}
0840デフォルトの名無しさんNGNG
>>819
まぁ、がんがれや。
0841819NGNG
ありがとうございます。
Cは始めたばかりですが、頑張ります(`・ω・´)
0842デフォルトの名無しさんNGNG
それだったら、
printf("%s", __FUNCTION__);
でいいでしょう。

あとは、
#define AAAA
#define A_STR(v) #v
printf("%s", A_STR(A));
とかね。
0843デフォルトの名無しさんNGNG
>>833
手打ちしてコメントにしておけば済むだろ。

//#define A AAAA
//#define AS "AAAA"
#define A BBBB
#define AS "BBBB"
//#define A CCCC
//#define AS "CCCC"

コメントを消したり付けたりするのすら面倒だというなら#ifつかえ。
0844デフォルトの名無しさんNGNG
>>842 利口
>>843 暇人
>>833 無知
0845デフォルトの名無しさんNGNG
>>842
それは"A"になる。もちろん#define A AAAAにしても。
0846845NGNG
ああ、もちろん「あとは、」より下の例が。
0847デフォルトの名無しさんNGNG
>>818
#define _STR_(x) # x

printf("%s", _STR_(A));
0848デフォルトの名無しさんNGNG
>>827
cpp のソース持ってきてちょこっと書き換えればできるだろ。
それくらい自分でやったらどうだ?
0849デフォルトの名無しさんNGNG
>>847
だからそれじゃ"AAAA"ではなく"A"になるってば。
0850デフォルトの名無しさんNGNG
>>847
識別子の先頭に '_' 付けるな! ヴォケ

#define REP(x) x x x x
#define STR(x) REP(#x)

printf("%s", STR(A));
0851818NGNG
なかなか良いアイディアってないもんですね。。。。
あきらめます。
0852818NGNG
>>842
__FUNCTION__マクロなんてあるんですね。
勉強になりました。
他の人もいろいろ考えてくれてありがとう。
0853デフォルトの名無しさんNGNG
つか、>>850 で駄目なの?
0854デフォルトの名無しさんNGNG
>>853
質問するときの例が悪いだけ。つか悪すぎるだけ。最悪なだけ。
0855デフォルトの名無しさんNGNG
>>853
850はネタじゃないの?
0856デフォルトの名無しさんNGNG
>>818
これでいんじゃね?

#define A AAAA
#define TO_STR(x) #x
#define XTO_STR(x) TO_STR(x)
#define A_STR XTO_STR(A)

printf("%s¥n", A_STR);

だまされたと思ってやってみ
0857デフォルトの名無しさんNGNG
とりあえず次の関数だけ定義しておく
void printFUNCname(void (*f)(void))
{
if(f == AAAA) print "AAAA";
if(f == BBBB) print "BBBB";
if(f == CCCC) print "CCCC";
}

プログラム中で
printFUNCname(A);
を実行
0858デフォルトの名無しさんNGNG
>>853
何処が?
0859デフォルトの名無しさんNGNG
>>857はPerler
0860デフォルトの名無しさんNGNG
>>859
意図は分かってくれ。
っていうか、結局 >>818 が >>833 で自白しているように、
最初から関数ポインタ使っとけっていう場面。
0861デフォルトの名無しさんNGNG
>>759
ぼけ

int i; // これが宣言
i = 0; // これが定義
0862デフォルトの名無しさんNGNG
あついあつい
0863デフォルトの名無しさんNGNG
> 関数の引数を2次元配列にする時だけ1番目の要素を省略できるのは何故ですか?

いいえ。1時限配列にするときも3時限配列にするときも「1番目の要素数」を省略できますよ。
0864デフォルトの名無しさんNGNG
> 「副作用」って用語がどういう意味かわかって使っているか?

水戸のご隠居の別名
0865デフォルトの名無しさんNGNG
> すみません、これのどこがまずいでしょうか?

scanf使っているところ。
0866デフォルトの名無しさんNGNG
マクロの副作用:食欲不振・下痢になることがあります。
0867デフォルトの名無しさんNGNG
>>861
int i; //定義宣言
extern i; //宣言

もしiについてのextern宣言が他にあったなら
int i; //定義
0868867NGNG
ごめん、下の2行間違い。削除
0869デフォルトの名無しさんNGNG
> //定義宣言

そんなもなーないぞ
0870867NGNG
>>869
int i;
なんか定義と宣言を同時に行っているだろ?
あまり使われないみたいだけど定義宣言という言葉はある

ってか調べおしたら変数で一般的に定義といわれているものは正しくは定義宣言、
externで変数名を導入することは参照宣言というらしい。
0871デフォルトの名無しさんNGNG
ということはどっちも宣言だ
0872デフォルトの名無しさんNGNG
> なんか定義と宣言を同時に行っているだろ?

いいえ。

> あまり使われないみたいだけど定義宣言という言葉はある

いいえ。まったくありません。
0873デフォルトの名無しさんNGNG
> ってか調べおしたら変数で一般的に定義といわれているものは正しくは定義宣言

それウソ。いいかげんなこと言うな。
どこが「正しく」だよ ぼけ。
0874デフォルトの名無しさんNGNG
初心者は回答禁止
0875デフォルトの名無しさんNGNG
ここは中途半端な知識をひけらかしたり、
ちょっと調べただけの情報を広めるスレですか?
0876デフォルトの名無しさんNGNG
>>875
ぼ    けと書く人はスルーで。
0877デフォルトの名無しさんNGNG
今ごろ気付いたの?
0878デフォルトの名無しさんNGNG
定義宣言っていう言葉が定義されてるのはどこだ?
0879デフォルトの名無しさんNGNG
どこにもないって
0880デフォルトの名無しさんNGNG
ここは凄いインターネットですね
0881デフォルトの名無しさんNGNG
定義宣言w
0882デフォルトの名無しさんNGNG
定義宣言って英語でいうと何?
0883デフォルトの名無しさんNGNG
>>827

こんなことがしたいのか?

#define E(x) char x[] = #x;

E(A)
E(AAAA)

#undef
0884デフォルトの名無しさんNGNG
>>863

揚げ足厨がtypoしてるぜ(プ
0885デフォルトの名無しさんNGNG
わざとだろ?
0886デフォルトの名無しさんNGNG
#define macro // マクロの定義宣言
void func(void) // 関数の定義宣言
{
 int var; // 変数の定義宣言
}

テストに出るらしいぞ。
0887デフォルトの名無しさんNGNG
>>886
1つ聞くが、おまえさんは国内での用語の基準は何だと思っている? もちろんCに関して
どーせふざけて誤魔化すだけだろうが(プ
0888759NGNG
>>861

>int i; // これが宣言

それは定義

>i = 0; // これが定義

それは代入

プロトタイプ無しで現れた関数定義なんかは、
宣言も兼ねている。
0889デフォルトの名無しさんNGNG
というか886は何を基にしてるんだ?
0890デフォルトの名無しさんNGNG
俺は867じゃないんで詳しくは知らんが、
Cはgrammarだけを見れば、外部定義の中に関数定義と宣言があるだけだな。

file : external_definition | file external_definition ;
external_definition : function_definition | declaration ;

だが、Cは宣言の中で定義もできるという無茶な仕様の言語と言われることもあったと思う。
grammarを全部みれば俺もわかると思うんが、たとえば、

int i;
int i;
int i;

このように、「int i;」は宣言だから複数宣言しても昔はOKだったが、今は変更されたんか?
定義宣言という言葉はしらんが、「int i;」は宣言であり、最後の宣言だけが有効になる、と聞いたと思ったんだが…
0891デフォルトの名無しさんNGNG
ちなみに
宣言は declaration。
定義は definition。

定義宣言なんて知らん。
0892デフォルトの名無しさんNGNG
あれだろ、あれ、ハングル文字
0893デフォルトの名無しさんNGNG
それによって、実体が作られるものが定義。
そうでないものは宣言。
こう考えればおけ。
0894デフォルトの名無しさんNGNG
でも構造体や共用体は定義しても実体はつくられないよね。
0895デフォルトの名無しさんNGNG
べつに実体ができるわけじゃないからなあ > int i;
0896デフォルトの名無しさんNGNG
> このように、「int i;」は宣言だから複数宣言しても昔はOKだったが

いいや。昔のUnixのCの時代だらそれはエラーだった。
0897デフォルトの名無しさんNGNG
次の3つについて定義か宣言かとその機能の違いについて述べよ
int i;
extern int i;
static int i;
0898デフォルトの名無しさんNGNG
autoの変数で
int i;と書いてあっても、
その変数を1回もつかっていないと、その分スタックをオフセットしないので
「実体は作られていない」ですよね?
0899デフォルトの名無しさんNGNG
>>897
(ry

ちなみに試験に出るらしいぞ。
0900デフォルトの名無しさんNGNG
>>870
>ってか調べおしたら変数で一般的に定義といわれているものは正しくは定義宣言、

引用してみてよ。気になる。
0901デフォルトの名無しさんNGNG
>>898
下手な釣りだな
0902デフォルトの名無しさんNGNG
何もかかなければ「int」だったので、数年前までのCでは、
foo()
{
i;

for (i = 0; i < 10; i++)
...
もOKだったのですが、5年ほど前からでてきているC99準拠の処理系だとだめ。
0903デフォルトの名無しさんNGNG
構造体の場合は

struct s { int x; int y; };
みたいのは定義。
変数の定義とは違うにょ。

struct s;
みたいのは宣言。

>>895,898
最適化をまったくしないとすれば、実体はできるでしょう。

0904デフォルトの名無しさんNGNG
お前ら思い付きで物言うな。
何か主張したいならすべて引用元を明示しろ。
脳内はかんべんな。
0905デフォルトの名無しさんNGNG
> int i;

定義。
スコープは書かれる場所による。

> extern int i;

宣言。
なので実体が作られないので、
定義が別になければリンクエラーになる。

> static int i;

定義。
スコープは書かれる場所による。
0906デフォルトの名無しさんNGNG
引用でないと主張できないんだろうか。
0907デフォルトの名無しさんNGNG
>>903
>struct s { int x; int y; };
これは宣言

>struct s;
これは不完全型の宣言

>int i;
おまえさんは、リンカがしている「ある仕事」を知らないようだな
autoとか突然言い出した898はぼけ
0908デフォルトの名無しさんNGNG
>>906
お前らはすべきじゃない>引用なしの主張
0909デフォルトの名無しさんNGNG
>>904
お前こそ引用元を明示しろ
0910デフォルトの名無しさんNGNG
>>907
struct s { int x; int y; }; が構造体の定義で、
struct s S;が構造体変数の定義じゃないの?
0911デフォルトの名無しさんNGNG
>>908
失礼なやつだな
人の言うことを頭から剽窃行為と決め付けてやがる
0912デフォルトの名無しさんNGNG
なんでここでスクイズ・・・
しかも失敗してんじゃねーか!!
0913デフォルトの名無しさんNGNG
>>911
剽窃だからじゃない
不正確だからちゃんとソースを確認して正確に引用しろといってるだけ
0914912NGNG
おっと、、、
0915デフォルトの名無しさんNGNG
>>910
× struct s { int x; int y; }; が構造体の定義で、
○ struct s S;が構造体変数の定義じゃないの?
0916デフォルトの名無しさんNGNG
プログラミング言語Cの表記見ればいいんじゃない。
0917デフォルトの名無しさんNGNG
いけいけダルビッシュ〜
0918燃料投下(^^!NGNG
>>struct s { int x; int y; };
>これは宣言

型の定義(^^!

>>struct s;
>これは不完全型の宣言

型の宣言(^^!
0919デフォルトの名無しさんNGNG
>>918
不発

思考停止したアフォは放置
0920デフォルトの名無しさんNGNG
おまえらだめすぎ
0921デフォルトの名無しさんNGNG
extern int i; /* これは宣言 */
static int j; /* これは定義 */
0922デフォルトの名無しさんNGNG
共産党○○ /* これは宣言 */
ウィルス○○ファイル /* これは定義 */
0923デフォルトの名無しさんNGNG
○○温泉
0924デフォルトの名無しさんNGNG
白骨温泉
0925デフォルトの名無しさんNGNG
>>912
京都負けちゃったね
0926867NGNG
おい、本屋でこの本の293Pでも立ち読みしてみぃ、ちゃんと説明でてるからぁ。
http://www.amazon.co.jp/exec/obidos/ASIN/477410843X/249-1598953-0831507

あとぉ、ネット検索しても本当に少しだけだけど触れているページだってあるぞぉぉ!w
0927デフォルトの名無しさんNGNG
K&RまたはANSI/ISO Cの規格書以外のソースは却下
0928デフォルトの名無しさんNGNG
>>926
この本を正規購入して読め、「本当に少し」の理由がわかるはず
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=JIS+X+3010%3A2003&dantaiCd=JIS&status=1&pageNo=0
0929867NGNG
>>928
ほい、みてみまつ。
0930デフォルトの名無しさんNGNG
>>918
今時 struct をそのまま使う香具師の気が知れない。
使うなら、

typedef struct mytype_ {/* mytype_ は自分の構造体の中で mytype へのポインタが
                  出てくる場合のみ */
・・・・・
} mytype;

という「熟語」を使うのが常套手段。
0931デフォルトの名無しさんNGNG
>>930
構造体かどうかの区別がつきにくくなるだろ!
0932デフォルトの名無しさんNGNG
>>930
俺も>>931に同意だけど、好きな方使えばいいんでない?
だから素直にstruct ***とやっている人を馬鹿にしてはいけない



なんてカッコつけて言ってみたw
0933デフォルトの名無しさんNGNG
がびーん、>926の本持ってた...。

p.293 19.3.3 宣言と定義のセクションより引用
>変数宣言は, 宣言であり, かつ定義でもある.
>(中略, 定義と宣言についての説明がある)
>変数宣言のように宣言と定義が同時に行われるのを定義宣言という.

強調されて書かれてるしw → 定義宣言
0934デフォルトの名無しさんNGNG
>>931
変数の意味も分からずに使うことはまず無いので無問題。
変数の宣言・定義の度に struct を打つのは無駄。

関数だったら、何も分からなくても

sometype myfunc(mytype a, mytype2* b, ・・・)
{
・・・
}

とかで済むし、必要があれば a.member, b->member2 とすれば良いし、
構造体でない型の変数でドットやアローを付けてしまっても syntax error になるだけだから、
一切問題は起こらない。

では、問題になるケースというのは?
0935デフォルトの名無しさんNGNG
>>932
どちらも間違いではないけど、既製のヘッダファイルを見ればほぼ例外なく
typedef struct と書いてある。
0936デフォルトの名無しさんNGNG
>>933
焚書推奨
0937デフォルトの名無しさんNGNG
>>936
       ヽ|/
     / ̄ ̄ ̄`ヽ、
    /         ヽ
   /  \,, ,,/    |
   | (●) (●)|||  |
   |  / ̄⌒ ̄ヽ U.|   え? なんだって?
   |  | .l~ ̄~ヽ |   |
   |U ヽ  ̄~ ̄ ノ   |
   |    ̄ ̄ ̄    |
0938デフォルトの名無しさんNGNG
6.9.2 External object definitions
Semantics
1 If the declaration of an identifier for an object has file scope and an initializer, the
declaration is an external definition for the identifier.
2 A declaration of an identifier for an object that has file scope without an initializer, and
without a storage-class specifier or with the storage-class specifier static, constitutes a
tentative definition. If a translation unit contains one or more tentative definitions for an
identifier, and the translation unit contains no external definition for that identifier, then
the behavior is exactly as if the translation unit contains a file scope declaration of that
identifier, with the composite type as of the end of the translation unit, with an initializer
equal to 0.
3 If the declaration of an identifier for an object is a tentative definition and has internal
linkage, the declared type shall not be an incomplete type.
4 EXAMPLE 1
int i1 = 1; // definition, external linkage
static int i2 = 2; // definition, internal linkage
extern int i3 = 3; // definition, external linkage
int i4; // tentative definition, external linkage
static int i5; // tentative definition, internal linkage
int i1; // valid tentative definition, refers to pre vious
int i2; // 6.2.2 renders undefined, linkage disagreement
int i3; // valid tentative definition, refers to pre vious
int i4; // valid tentative definition, refers to pre vious
int i5; // 6.2.2 renders undefined, linkage disagreement
extern int i1; // refers to pre vious, whose linkage is external
extern int i2; // refers to pre vious, whose linkage is internal
extern int i3; // refers to pre vious, whose linkage is external
extern int i4; // refers to pre vious, whose linkage is external
extern int i5; // refers to pre vious, whose linkage is internal
0939デフォルトの名無しさんNGNG
>>934、
自分が使いやすいと思ったほうを
使うのが一番だと思われ。
そんなムキになるようなことじゃない。
0940デフォルトの名無しさんNGNG
>>939
ムキになることじゃない、この点はよい
ただし理由がおかしいよ
0941デフォルトの名無しさんNGNG
>>940
え?
何かおかしい?
別に普通の理由だと思うが?
0942デフォルトの名無しさんNGNG
自分が
0943デフォルトの名無しさんNGNG
Cのsocketプログラミングについて質問させて下さい。
最初にWSAData構造体に何が格納されているかを表示させるプログラムを
書いたのですがいきなり躓きました。
以下のようなコードを書いたのですが
wVersion=257
wHighVersion=514
という結果が出ました。
自分の環境だとwVersion=1.1,wHighVersion=2.2になると思ってたのですが
何故こんな結果になってしまったのでしょうか?

#include <winsock.h>

//以下main文
WSADATA wsadata; //WSADATA型変数宣言

if(WSAStartup(MAKEWORD(1,1),&wsadata)){
printf("WSAStartup関数失敗です\n");
return -1;
}
printf("wVersion=%u\n",wsadata.wVersion);
printf("wHighVersion=%u\n",wsadata.wHighversion);
printf("szDescription=%s\n",wsadata.szDescription);
0944デフォルトの名無しさんNGNG
>>943
%uで小数が表示されるわけないだろ
0945デフォルトの名無しさんNGNG
>>944
はう、お盆なので親戚が来てかなり酒が入ってる状態です
お許しください
俺が書きたかったのは下のコードでした
printf("wVersion=%d.%d",LOBYTE(wsadata.wVersion),HIBYTE(wsadata.wVersion));

じゃあ、
printf("wVersion=%u\n",wsadata.wVersion);
printf("wHighVersion=%u\n",wsadata.wHighversion);
の
wVersion=257
wHighVersion=514
は何なんでしょうか?
0946デフォルトの名無しさんNGNG
脳が既に活動停止しているようです。
とっとと,お帰り下さい。
wVersion=MAKEWORD(1,1)
wHighVersion=MAKEWORD(2,2)
0947デフォルトの名無しさんNGNG
WORD型で定義されてるから。
%hsにしる。

# そもそもスレ違い
0948デフォルトの名無しさんNGNG
あら?typoしてまってた。%hdだ。

鬱
0949デフォルトの名無しさんNGNG
その点は確かにそうだけど
その点での誤動作は絶対にしないんだな。

intサイズ以下の整数を可変引数をとる関数(の可変引数部)に渡すと
必ずint型に格上げされるからね。
0950デフォルトの名無しさんNGNG
ああ。そうだった。ついでに、floatもdoubleに格上げされるんだったね。
痛いな。俺。

wVersion == 0x0101
だから257
0951デフォルトの名無しさんNGNG
> おい、本屋でこの本の293Pでも立ち読みしてみぃ、ちゃんと説明でてるからぁ。

有名な「ダメ本」じゃん。
0952デフォルトの名無しさんNGNG
> 変数宣言は, 宣言であり, かつ定義でもある.

こういうウソを平気で書いている本を買うなよなあ。

0953デフォルトの名無しさんNGNG
> はう、お盆なので親戚が来てかなり酒が入ってる状態です

あと2週間も先だろ > お盆
0954デフォルトの名無しさんNGNG
>>953
お前はどこの国の人間だ?
0955デフォルトの名無しさんNGNG
お盆の時期

毎年、七月十五日を中心に、十三日を迎え盆、十六日を送り盆といい、
十三日から十六日までの四日間を、お盆の期間とします。ただし、
旧暦の七月十五日や、月遅れの八月十五日を中心にお盆をつとめるところもあります。

本来は、仏教の行事だったお盆ですが、働く人は盆休みをこの時期にとり、
故郷のある人は帰り、盆踊りをして楽しみ、生きている私たちの生活のなかに、
しっかりと根ざしている、夏の季節の節目となっています。
0956デフォルトの名無しさんNGNG
> 本来は、仏教の行事だったお盆ですが、働く人は盆休みをこの時期にとり、

もともと仏教なんかよりはるか以前からある行事でしょ
それを否定するわけにはいかないので、仏教でもそれをoverloadしただけ。
(お盆っていう言い方もそのとき以来のもの)

キリスト教でも「そうそう! イエス様は12月24日生まれだったんですよ!」ってことに
して、古くからある冬至のイヴェントをoverloadしたように(本当は4月上旬生まれらしい)。
0957デフォルトの名無しさんNGNG
仏教でも「そうそう、お釈迦様のありがたいおことばにこんなのがあります!」と
7月15日の行事を肯定するためのにせもののお経をでっち上げて、
(中国語じゃなくてサンスクリット語で!)そうまでしてoverloadする必要が、
中国南部と北部ではあったわけだ (中央部では民族に違いによりなかった)。

でも、そんなお経よりはるか以前から、日本の島々では、7月15日に先祖の霊を
うやまうための行事がずっと行われていた。
0958デフォルトの名無しさんNGNG
↑
それは日本や沖縄も客家の人たちと同じ祖先の血をひいているから。
インドよりももっと西方、いまのイランやイラクあたりから来た人たちだから。

そもそも「お盆」というネイミングも、イラン語系の古い言葉で精霊を意味するurvan -> サンスクリット語のullanbana -> 盂蘭盆 -> お盆
となったもの。
0959デフォルトの名無しさんNGNG
なので、7月15日の満月の晩にやらなきゃいけない行事なので、
日付をずらすのはナンセンス。
お正月と七月の行事は日付の変更はあり得ない。
5月の行事は生きているひとのほうの都合である程度の変更は許されている。
0960デフォルトの名無しさんNGNG
ちょっと待って
>イランやイラクあたりから来た
>日付をずらすのはナンセンス
と言うなら、日本の太陽太陰暦(いわゆる旧暦)で日付を決めるのは変でない?
0961デフォルトの名無しさんNGNG
だから満月を基準にしてるんでしょ?
0962デフォルトの名無しさんNGNG
7月は、何を基準に7月なの?
0963デフォルトの名無しさんNGNG
GMTに決まっておる。
0964デフォルトの名無しさんNGNG
> と言うなら、日本の太陽太陰暦(いわゆる旧暦)で日付を決めるのは変でない?

メソポタミアはもともと太陰暦です。
0965デフォルトの名無しさんNGNG
そういえば、某v氏は、「うちの祖先はシュメール人なので...」がくちぐせだな。
0966デフォルトの名無しさんNGNG
日本の太陽太陰暦と古代メソポタミアの太陰暦は同じなの?
0967デフォルトの名無しさんNGNG
スレ違い氏ね
0968デフォルトの名無しさんNGNG
> 日本の太陽太陰暦と古代メソポタミアの太陰暦は同じなの

おめーいわゆる太陽太陰暦と太陰暦の差をしらんのか!

中国の太陰暦と日本のは何千年に1回の確率で1日ずれるか知ってる?
(それでも正月とお盆はずれない)
0969966NGNG
>>968
知らないから質問している。それと訊いているのは中国の話ではなく古代メソポタミアの話。
現在のメソポタミアの暦(イスラム暦)は日本の旧暦とはだいぶ違うよね。
0970デフォルトの名無しさんNGNG
ttp://www.cosmo-oil.co.jp/kankyo/dagian/37/17.html
ttp://neo-luna.cside.ne.jp/moon/ml06.htm
ttp://neo-luna.cside.ne.jp/moon/ml06s.htm
ttp://homepage3.nifty.com/such/shumi/shumi1/calendar4.html
ttp://www.edp.eng.tamagawa.ac.jp/~sumioka/history/orient/orient01.html
ttp://www.eva.hi-ho.ne.jp/suruga/sekaikokogakunext.htm
ttp://www.sqr.or.jp/usr/akito-y/kodai/15-orient1.html
ttp://astro.ysc.go.jp/izumo/shogatu.html
0971デフォルトの名無しさんNGNG
http://www.cosmo-oil.co.jp/kankyo/dagian/37/17.html
http://neo-luna.cside.ne.jp/moon/ml06.htm
http://neo-luna.cside.ne.jp/moon/ml06s.htm
http://homepage3.nifty.com/such/shumi/shumi1/calendar4.html
http://www.edp.eng.tamagawa.ac.jp/~sumioka/history/orient/orient01.html
http://www.eva.hi-ho.ne.jp/suruga/sekaikokogakunext.htm
http://www.sqr.or.jp/usr/akito-y/kodai/15-orient1.html
http://astro.ysc.go.jp/izumo/shogatu.html
0972デフォルトの名無しさんNGNG
>>966
日本の太陽太陰暦と古代メソポタミアの太陰暦は同じだったらしい。
現在のイスラム暦は西暦622年に制定された。
0973デフォルトの名無しさんNGNG
fgets(str, 10, stdin);
などで文字配列に10文字以内の文字列を入れさせたはいいんですけど、
10文字以上の入力あったら10文字以降はstdinに残ったままで
その後の標準入力に関する操作がうまく働くなくて困っています。
stdinに残ってしまったバッファをクリアするにはどうすればよいのでしょうか?

while(!foef(stdin)) ch = fgetc(stdin);
などやってみましがうまくいきませんでした。
0974デフォルトの名無しさんNGNG
>>973
fflushを試し
0975973NGNG
>>974
stdinなんですけど。
0976デフォルトの名無しさんNGNG
釣りに注意
0977デフォルトの名無しさんNGNG
>973
>while(!foef(stdin)) ch = fgetc(stdin);
オールスキップしてどうするよ
次の改行まで読み捨てれ
0978973NGNG
>>974
回答ありがとうございます。fflush()は前も試しましたが効果はありませんでした。
それと、>>975は私ではないです。

>>977
では
fgets(tmp, INT_MAX, stdin);
みたいなことをすればいいですか?
0979デフォルトの魚釣りさんNGNG
#include <stdio.h>
#include <string.h>

int main()
{
    char s[8];
    fgets(s, sizeof(s), stdin);
    if(sizeof(s) - strlen(s) == 1 && s[sizeof(s)] != '\n')
        while(fgetc(stdin) != '\n');
    fgets(s, sizeof(s), stdin);
    return 0;
}
0980デフォルトの名無しさんNGNG
INT_MAX よりも長い行があったらどうするの?
0981デフォルトの名無しさんNGNG
selectでタイムアウト漬けておくとか
0982デフォルトの名無しさんNGNG
>>973
rewind(stdin)
はい、おしまい。
0983デフォルトの名無しさんNGNG
>>979
普通にgetcharとかで1文字づつ処理したほうが、素直じゃね?
0984973NGNG
>>979
返事おくれてすみません、自分でその処理を追っていました。
大体はそれで問題は解決できますね!ありがとうございます。
ただ一回目のfgets()の時にちょうど8文字(改行除く)を入力した時にgetc()の部分も実行されて計3回入力しなければいけなくなるようです。

あと、s[sizeof(s)]ってs[8]ということになりますよね?
これは存在しない要素を指すことにはならないのですか?
0985デフォルトの名無しさんNGNG
猫でもわかるでマルチスレッドプログラミング勉強してるけど
うまく動かない(スレッド関数が実行すれない)。
つか、CreateThread関数、スレッド関数が<windows.h>にインクルードされてるって
書いてあるけど見つからんけど何故ですか?
VC++ 6.0 使っています

0986973NGNG
ほんとうにすいません、「8文字の時に3回の入力〜」は私があれこれいじってそうなっていただけでした。
ありがとうございました。

>>983
getchar()でもためしてみようと思います!
0987デフォルトの名無しさんNGNG
s[sizeof(s)] には何があるん?
0988デフォルトの名無しさんNGNG
彼はデフォルトの魚釣りさんだぞ。
0989973NGNG
あぁ、何度もすみません。
やはり一回目の入力が(sizeof(s) - 2)文字の時に3回入力が求められてしまいます。
いろいろ試してみてるのですがこれはどういう具合でしょうか?
0990デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1092547818/
新スレ
0991973NGNG
全ての解決することができました!
なんか一人で騒いじゃって申し訳ありません。
ありがとうございました。
0992デフォルトの名無しさんNGNG
>>991
どうやって解決したか書けよ馬鹿
0993973NGNG
>>992
すみません。(sizeof(s) - 2)文字の時にgetc()も実行されてしまう問題は
if(sizeof(s) - strlen(s) == 1 && s[sizeof(s) - 2] != '\n')
                          ↑ここ
とすることで解決できました。
0994デフォルトの名無しさんNGNG
char buf[BUFSIZE];

fgets(buf, BUFSIZE, stdin);
if (strchr(buf, '\n') == NULL)
while (fgetc(stdin) != '\n');
fgets(buf, BUFSIZE, stdin);
0995デフォルトの名無しさんNGNG
おまえら-1が帰ってくることも想定できないんだな。
0996デフォルトの名無しさんNGNG
対処したけりゃ自分でやれ。あくまでサンプルなんだから。
0997デフォルトの名無しさんNGNG
>>997
プ
0998デフォルトの名無しさんNGNG
>>998
>>ププ
0999デフォルトの名無しさんNGNG
>>999
クックック…
1000973NGNG
>>994
この方がシンプルですね。
まだ標準ライブラリ関数についてあまり知らないからこういうときに不便を感じますね〜
もっと勉強します。

>>995
たしかにchar s[1]の時にかえってくるかもしれませんけど、、、
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。