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

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

■ このスレッドは過去ログ倉庫に格納されています
0001v(^o^i)dNGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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

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

コンパイラを探しているなら >>2-13 を。
上記を逸した場合の結果は激しく未定義だYO!

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

各種リンクは>>3-20あたり(誰か適当に貼って)

C言語なら俺俺に聞け! Part 75
http://pc5.2ch.net/test/read.cgi/tech/1079331297/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002デフォルトの名無しさん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/

【ライセンスや機能などに問題あり】
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
0003デフォルトの名無しさんNGNG
3
0004デフォルトの名無しさんNGNG
過去ログ置き場
http://nssearch.hp.infoseek.co.jp/clang/
0005デフォルトの名無しさんNGNG
お猿さんたちはこちらへ。
http://pc5.2ch.net/test/read.cgi/tech/1080010285/
0006デフォルトの名無しさんNGNG
typedefを使う意味を教えてください。
初心者には使う理由が見当たりません。
0007デフォルトの名無しさんNGNG
>>6
構造体を
struct MyStruct A,B;
とかでなく、
MyStruct A,B;
って感じで宣言できるようになることなど.
00086NGNG
>>7
なるほど、構造体もありましたか
レスthx
0009デフォルトの名無しさんNGNG
>>1
モツ
0010デフォルトの名無しさんNGNG
>>1
> C言語なら俺俺に聞け! Part 75
これはわざとか?ともあれ乙。
0011デフォルトの名無しさんNGNG
>>10
いやコピペして番号を修正しただけ。
気づかなかった・・・
0012デフォルトの名無しさんNGNG
>>998
ただしい引数で関数を呼んでコンパイルエラーになったらたまらん。
0013デフォルトの名無しさんNGNG
>>998
なにがしたいのか良く分からんが。なんとなく sizeof(bar->hoge) と書いておく。

ちっとは進化しろ。
0014デフォルトの名無しさんNGNG
>memset(bar, '\0', sizeof(*bar));
>はOKということですか?
Yes.
これはメモリに展開しているhogehogeの先頭アドレスからsizeof(*bar)バイトに'\0'が代入される
0015デフォルトの名無しさんNGNG
>970 :デフォルトの名無しさん :04/04/11 00:39

    memset(bar, '\0', sizeof(bar));
    printf("bar->hogeの値は[%s]です。", bar->hoge);    /* 初期化されてない */

>まず、以上のコードでは、Hoge型の変数hogeの内容は初期化されませんか?
されます。sizeof(Hoge *)分だけ。

>sizeof(Hoge)
>とすればよいのでしょうか?
よい。



    sprintf(bar->hoge, "%d", i);             /* コピーされない */
    printf("bar->hogeの値は[%s]です。", bar->hoge);

>sprintfが反映されないのは何故でしょうか?
反映されるが何か?
0016デフォルトの名無しさんNGNG
はじめまして、私はC初心者です。
すみませんが教えてください。
C++5.5のコンパイラでC言語を打ちコンパイルすることは
できますでしょうか?
0017デフォルトの名無しさんNGNG
C++をコンパイルできてCを理解できないコンパイラはないと思うが。てか
C++5.5ってなに?BorlandC++と書かないとわからんぞ。
0018デフォルトの名無しさんNGNG
> C++をコンパイルできてCを理解できないコンパイラはないと思うが。

いっぱいありますよ。
C++をコンパイルできるくせに、Cの複合定数をエラーにしてしまったり、
拡張子を.cにしたとたん、関数の先頭以外のint i;をエラーにしてしまうような
コンパイラーは「Cをコンパイルできる」とはいわないでしょ。

> C++5.5ってなに?BorlandC++と書かないとわからんぞ。

5.5というえばBorandのより有名なやつがありますね。そっちのことでしょう。
0019デフォルトの名無しさんNGNG
> C++5.5のコンパイラでC言語を打ち

コンパイラーでは打つことはできませんね。
それに打つのは「C言語」ではないでしょう。
0020デフォルトの名無しさんNGNG
>>18
> 拡張子を.cにしたとたん、関数の先頭以外のint i;をエラーにしてしまうような

はぁ ? 当たり前だと思うが。
0021デフォルトの名無しさんNGNG
>>16
拡張子を.cにすればいい
0022デフォルトの名無しさんNGNG
>>18
世間では C99 未対応というだけでは
「Cを理解できないコンパイラ」とは呼ばない。
0023デフォルトの名無しさんNGNG
>>18
> 拡張子を.cにしたとたん、関数の先頭以外のint i;をエラーにしてしまうような

それが普通ですが
0024デフォルトの名無しさんNGNG
>>22
言い出したら「Cを理解できるコンパイラ」は1つもないな
0025デフォルトの名無しさんNGNG
>Cを理解できるコンパイラ

何だかキモいコンパイラだな
0026デフォルトの名無しさんNGNG
>>20 >>23
こいつらぼけすぎ。
ちゃんとしたCコンパイラーは、関数の先頭じゃなくても
int i;できて当然! (うちのはちゃんとできる)
0027デフォルトの名無しさんNGNG
>>26
はぁ、"俺規格" 至上主義の方ですか。。。
0028デフォルトの名無しさんNGNG
>>27
俺規格でもC99でもなくてもブロック内変数は使えるが?
0029デフォルトの名無しさんNGNG
もう必死ですよ。
0030デフォルトの名無しさんNGNG
>>28
どんな内容であれ、その論拠が

うちのはちゃんとできる

では、俺規格と言われても仕方がないと思うが?
0031デフォルトの名無しさんNGNG
>>28
ブロック内変数をエラーにするコンパイラを教えてくれ。
0032デフォルトの名無しさんNGNG
グローバル変数しか使えなかったら使い物にならないなw
0033デフォルトの名無しさんNGNG
そんなボケた突っ込みをわざわざアゲて書くこともないだろうに...。
0034デフォルトの名無しさんNGNG
言い飽きたと思いながら、それでも口をついて
出てくる言葉…それが

  「春だな」
0035デフォルトの名無しさんNGNG
int main(){
int a;
for(int i = 0; i < 10; i++) /*C++で保証*/
;
int b;/*C++で保証*/
for(a = 0; a < 10; a++){
int x = 0/*CでもC++でも保証*/;
x += a;
}
return 0;
}
0036ビル・ジョブスNGNG
お久しぶり。今フィリピンに居ます。
C99で一番便利な機能拡張は可変個の引数を持つマクロが定義できるようになったことかな?
皆さんはどう思われますか?
0037デフォルトの名無しさんNGNG
>>36
引き数全体を括弧で括ればなんとかなるけどね。

で、ぼけぼけの>18はどこ行った?
0038デフォルトの名無しさんNGNG
>>36
それもいいけど、__func__ もね。
0039デフォルトの名無しさんNGNG
>>36
識別子にマルチバイト文字
0040デフォルトの名無しさんNGNG
俺は可変長配列が一番ありがたいとオモタ。
0041デフォルトの名無しさんNGNG
>>39
正直それはいらんわ。
0042デフォルトの名無しさんNGNG
引数はひとつでトークンが ";" で複数区切られていて
それぞれのトークンを1行ずつ出力するプログラムをつくろうと下のようにしてみました。

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]){
char buf[1024];
char *ptr;

if(argc<=1){
fprintf(stderr, "argment error\n");
exit(-1);
}

strcpy(buf, argv[1]);

if((ptr=strtok(buf, ";"))==NULL){
fprintf(stdout, "%s\n", buf);
}else{
while(ptr!=NULL){
fprintf(stdout, "%s\n", ptr);
ptr=strtok(NULL, " ");
}
}

exit(0);
}
0043デフォルトの名無しさんNGNG
> for (int i = 0; i < 10; i++) /*C++で保証*/

Cでも使えるだろうが > ぼけ
004442NGNG

そうすると
abc
bash: cde: command not found
bash: efg: command not found
となっちゃいます。
どこが変なんですか?
0045デフォルトの名無しさんNGNG
> int b;/*C++で保証*/

当然Cでも使える。通らないコンパイラーで「Cに対応している」とはいわん。
0046デフォルトの名無しさんNGNG
> if(argc<=1){

空白あけろよぼけ。わざわざつめるな。
if (argc <= 1) { だろ
0047デフォルトの名無しさんNGNG
>42,44
悪いことはいわんからセミコロン ; ではなくコロン : でやってみて。
0048デフォルトの名無しさんNGNG
引数なしで起動したらargcがいくつになるか知ってる?
基礎からやりなし!

っていうか、そもそもおまえはどんな本を読んで勉強したんだ。本の名前を書け。
004942NGNG
>>47
できますた
0050デフォルトの名無しさんNGNG
>>44
多分

$ ./a.out abc;cde;efg

とかやってるんだろうな...。
bash について勉強した方がいいよ。
そのままでは、a.out には abc しか渡っていない。

あと、なんで二回目以降の strtok() 呼び出し時のデリミタが空白なんだ ?
0051デフォルトの名無しさんNGNG
printfを使わずにstdoutにfprintfか。ネタ決定だな。
0052デフォルトの名無しさんNGNG
でもまあ、いちいち指摘するほどのことでもない > 51
0053デフォルトの名無しさんNGNG
そこでコロンに仕様変更するのはダサい。
「;」が含まれるパラメーターの渡し方を教えるほうが正当。
0054デフォルトの名無しさんNGNG
そこで偽装セミコロンですよ、お父さん。
0055デフォルトの名無しさんNGNG
>>53
分かっていてからかっているんだろ。明らかにネタだしな。
0056デフォルトの名無しさんNGNG
そんなものはない > argment
0057デフォルトの名無しさんNGNG
>>55
いや、指摘するほうが知らなかったとみた。
0058デフォルトの名無しさんNGNG
>>57
知らなければセミコロンが問題だと分からないと思うが。
0059デフォルトの名無しさんNGNG
>>58
問題は知ってる奴が常に解決策を知ってるわけではないと思うが。
0060デフォルトの名無しさんNGNG
そもそもなんで strcpyするんだ? > ぼけ
0061デフォルトの名無しさんNGNG
>>60
argvが書き換え可能だと知らないからでは。
0062デフォルトの名無しさんNGNG
粘着だな
0063デフォルトの名無しさんNGNG
>>43
>>45
それではBCCはCには対応してないってことでつか?
0064デフォルトの名無しさんNGNG
環境
CPUia32-eのマシン(AthlonAMD64)
OSに、fedora core1(kernel2.4系)
コンパイラgcc-3.3.2-1.x86_64
で、64bit版のCのソース書くことになったんだけど、
longが4バイト → 8バイトに変わる以外、何か
気をつけることってありますか?
0065デフォルトの名無しさんNGNG
C言語の埋め込みSQLを現在しているところを
SELECT *  FROM TBL
WHERE A = :A;

LIKEを使ったWHERE条件に変えたいんですが
 
SELECT *  FROM TBL
WHERE A LIKE ':A%'

としても動いてくれません。
埋め込みSQLでLIKE文は使えないんでしょうか?
0066デフォルトの名無しさんNGNG
>>65
マルチはやめろ、ヴォケ。

最低でも、
***すれ立てるまでもない質問はここで 第53刷***
http://pc5.2ch.net/test/read.cgi/tech/1081170910/124
に答えてからにしろ。

----------------------------
【SELECT *  FROM TBL】の検索

C言語なら俺に聞け! Part 76
http://pc5.2ch.net/test/read.cgi/tech/1081597375/65

C言語なら俺に聞け! Part 75
http://pc5.2ch.net/test/read.cgi/tech/1079331297/953

***すれ立てるまでもない質問はここで 第53刷***
http://pc5.2ch.net/test/read.cgi/tech/1081170910/123

【3 件見つかりました】
0067デフォルトの名無しさんNGNG
>【3 件見つかりました】

すっげぇ。それいいな、何使ってンの?
0068デフォルトの名無しさんNGNG
>>67
OpenJane α 0.1.8.2

ログから検索で検索する。
タイトルしか出ないから、結果には手を加えているけどね。

普通にやると

-----------------------------------------
【SELECT *  FROM TBL】の検索

PC等 [プログラム] C言語なら俺に聞け! Part 76 65
PC等 [プログラム] ***すれ立てるまでもない質問はここで 第53刷*** 123

PC等 [プログラム] C言語なら俺に聞け! Part 75 953

【3 件見つかりました】
-----------------------------------------

と言う感じ。

あと当然ながら、自分が見ていないスレは検索対象外となる。
0069デフォルトの名無しさんNGNG
無くても作れば良いやん・・・。
0070↑NGNG
エッチ
0071デフォルトの名無しさんNGNG
>>61
こいつはぼけ。このコードでなんでargvを書き換える必要があるんだ?
もしかしてbufにコピーしたあとのbufやbufの指す内容に書き換えがあると
でも思ってるのか?
0072デフォルトの名無しさんNGNG
そんなものはない > C言語の埋め込みSQLを
0073デフォルトの名無しさんNGNG
>>71
strtok() の仕様も知らないで煽ってるつもりなのか ?
0074デフォルトの名無しさんNGNG
・・・・・・・・・・・・・・ぼけ
・・・・・・・・・・・・・・ぼけ



↑
0075デフォルトの名無しさんNGNG
>>74はぼけ。
0076デフォルトの名無しさんNGNG
int a,b=0;
a=b++;
でaに0が代入されるのはどうしてですか?
++演算子の方が優先順位(?)が高いから、
b++;
a=b;
と解釈されるんじゃないんですか?
0077デフォルトの名無しさんNGNG
>76 何のために 前置++ と後置++があるか分かってるか?
007876NGNG
>>77
すいません。勉強不足なもので、
前置とかまだよく理解してませんです。。。
もうちょっといろいろ調べてみます。m(_ _)m
0079デフォルトの名無しさんNGNG
>>76
それを説明するのは難しいな・・・

「式の評価」と「副作用」は全く別の作業。
式が評価された "瞬間" に副作用が起こる訳ではない、

とでも言えば分かるかな?
0080デフォルトの名無しさんNGNG
単に

temp = b;
b = b +1;
a = temp;

と解釈されるだけのことだろ。(temp は、b と同じ型の一時的な変数。)
0081デフォルトの名無しさんNGNG
>>79
じゃあその副作用はいつ起こるの?
0082デフォルトの名無しさんNGNG
>>80はなぜわざわざtempなど使うのか。
0083デフォルトの名無しさんNGNG
>>79
a=bもb++もただの式評価だと思うがどうよ?
0084デフォルトの名無しさんNGNG
>>82
>>80にとっては、いつもの事なんです。見逃してあげて。
0085デフォルトの名無しさんNGNG
後置++演算子は 変数の値を+1するが、 変更前の値を返す。

T increment(T* p){
T tmp = *p;
++*p;
return tmp;
}

と同等。 T は 適当な数値型に読み変えること。
0086デフォルトの名無しさんNGNG
>++演算子の方が優先順位(?)が高い

その通り。ただし b++ のように後置の ++ が付いた式の評価値は、
++ する前の値であると決まってる。b自身の値が本当に ++ されて
1 になる(ことが保証される)のは ; の直後から。

b++ という式の評価値と、bそのものの値が変化する(副作用)とを
区別して考える必要がある。
0087デフォルトの名無しさんNGNG
returnで値を返すときreturn a, b;とか複数は無理なんですか?

printf("%d %d", func());

int func(void)
{
int a, b;
a = rand() % 10;
b = rand() % 10;
return a, b;
}

とやってみたんですけどbのほうが1900と表示されます
0088デフォルトの名無しさんNGNG
>>87
無理です
0089デフォルトの名無しさんNGNG
> すいません。勉強不足なもので、

っていうか何見て勉強してるんだよ。
本とか参考にしてるなら、その本の名前ぐらい言えよ!
0090デフォルトの名無しさんNGNG
>>87
2つ返してどうやって受け取るつもりだったんだろ ;)

カンマ演算子は便利ですが、こういう勘違いをしたやつが書いたコードが
たまたま文法エラーにならないのでおもしろい。

それはともかく2つ返したら3つ返したくなるのでは?
アドレス渡しの変数で返すのはつまんないし、
もしかするとそれはスタック構造にするべきコードなのかもしれんし、
はたまた、実は2つといってもxとyみたいな組の値だったらどう返すべきかわかるよね? (って
だれにきいてんだろ)
0091デフォルトの名無しさんNGNG
>>87サンプルにrand()使って
>bのほうが1900と表示されます
と言われても困る。
0092デフォルトの名無しさんNGNG
>>76
優先順位と実行順序を混同してはならない

>>86
後置と単項は優先順位が異なっている
0093デフォルトの名無しさんNGNG
後置も単項だぞ > ぼけ
0094デフォルトの名無しさんNGNG
>>91
たぶんrand()は関係ない。
>printf("%d %d", func());
だってこれだもん↑
0095デフォルトの名無しさんNGNG
>>86
CFAQ3.2でも同じようなこと書いてあったから、
その通りだと思うんだけど、

> b自身の値が本当に ++ されて
> 1 になる(ことが保証される)のは ; の直後から。

b自身の値が更新されるのは、;以前のどこか、ってことになるよね。
すると、"b++"が評価されて、bの値がすぐ更新されてもおかしくない
と思うんだけどどう?
0096デフォルトの名無しさんNGNG
>>93
少なくとも優先順位の観点に於いて後置は単項ではない >真・ぼけ
0097デフォルトの名無しさんNGNG
>>82
はぁ ? じゃ、お前は一時変数使わんと説明してみな。
0098デフォルトの名無しさんNGNG
a=b
b=b+1
0099デフォルトの名無しさんNGNG
>>95
> すると、"b++"が評価されて、bの値がすぐ更新されてもおかしくない

それでも、b++ の結果は +1 される前の b の値であることが処理系によって保証される。

と決まっているんだから、そう覚えろ。
0100デフォルトの名無しさんNGNG
>>95
おかしくないと思います。
; に至るまでの間に b に副作用が起こらなければならないので、
b が 1 になっていることが "保証される" のは ; 以降という
意味です。分かりにくかったかもしれません。
0101デフォルトの名無しさんNGNG
>>98
この話の流れの中でマジで書いてるのか ?
頼むからネタだと言ってくれ。
■ このスレッドは過去ログ倉庫に格納されています