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

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

■ このスレッドは過去ログ倉庫に格納されています
0001v(^o^i)dNGNG
まず問題を冷静に吟味して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 98
http://pc5.2ch.net/test/read.cgi/tech/1104114259/
他の過去ログはここに
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/
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
0003デフォルトの名無しさんNGNG
【姉妹スレ】

C言語なら俺俺に聞け! Part 87
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
0004デフォルトの名無しさんNGNG
4様
0005デフォルトの名無しさんNGNG
センスねえな・・・ C99だぞ??
0006デフォルトの名無しさんNGNG
例えば __int64 ってのがあるコンパイラで
long long と記述してコンパイルできる方法はありますの?
0007デフォルトの名無しさんNGNG
>>6
ないんですの。
0008デフォルトの名無しさんNGNG
long longがint64とはかぎらんわな
0009デフォルトの名無しさんNGNG
C++builder5でコンパイルしようとしたら以下のようなエラーがでてしまいました。
別のではできていたようなので理由がわかりません、教えてください。

[C++ エラー] File1.cpp(5): E2209 インクルードファイル 'ERR.H' をオープンできない
[C++ エラー] File1.cpp(14): E2221 マクロ引数の構文エラー
[C++ エラー] File1.cpp(115): E2268 未定義の関数 'warn' を呼び出した
[C++ エラー] File1.cpp(161): E2268 未定義の関数 'strcasecmp' を呼び出した
[C++ エラー] File1.cpp(166): E2268 未定義の関数 'dprintf' を呼び出した
[C++ エラー] File1.cpp(210): E2268 未定義の関数 'dprintf' を呼び出した
[C++ エラー] File1.cpp(219): E2268 未定義の関数 'strcasecmp' を呼び出した
[C++ エラー] File1.cpp(223): E2268 未定義の関数 'dprintf' を呼び出した
[C++ エラー] File1.cpp(263): E2451 未定義のシンボル __func__
[C++ エラー] File1.cpp(263): E2268 未定義の関数 'dprintf' を呼び出した
[C++ エラー] File1.cpp(410): E2268 未定義の関数 'warnx' を呼び出した
[C++ 警告] File1.cpp(463): W8066 実行されないコード
[C++ 警告] File1.cpp(492): W8066 実行されないコード


0010デフォルトの名無しさんNGNG
>[C++ エラー] File1.cpp(5): E2209 インクルードファイル 'ERR.H' をオープンできない

そのまんまだる?
00119NGNG
なぜ#include <err.h>が使えないかがわからないんです・・・
すいませんがよろしくおねがいします。
0012デフォルトの名無しさんNGNG
err.hがあるのかね?
00139NGNG
ない場合はどうしたらいれられるのでしょうか?
0014デフォルトの名無しさんNGNG
>>13
err.hというファイルを手に入れろ
0015デフォルトの名無しさんNGNG
>13
ほかに代用できそうなものがないかあたれ
0016デフォルトの名無しさんNGNG
> 参考書とか読んでも本当に分かんないんです。 ごめんなさい

ならその本の名前書いてみろよ! かけないだろ? 本当は読んでないくせに。
0017デフォルトの名無しさんNGNG
stricmpではなくstrcasecmpが用いられているところから
unix系のソースを無理矢理コンパイルしている予感
0018デフォルトの名無しさんNGNG
Unix系なわけじゃなく、そっちが標準だろ?
0019デフォルトの名無しさんNGNG
標準なんてありませんが。
DOS/Windows系ではstricmpもしくはstrcmpiしか用意されていませんが。
0020デフォルトの名無しさんNGNG
> 標準なんてありませんが。

こいつぼけ
0021デフォルトの名無しさんNGNG
それにしてもstrncmpの仕様って使いにくいとおもわん?
nに0渡したときは何返すべきだと思う?
0022デフォルトの名無しさんNGNG
では、strcasecmpが標準な規格を教えてください。
POSIX等は、標準Cとは関係ないので却下です。
0023デフォルトの名無しさんNGNG
POSIXがでてくるあたりでおまえぼけだな > 22
0024デフォルトの名無しさんNGNG
POSIX好きはむしろBSD。あれのソースはstrlcpyありすぎ
0025デフォルトの名無しさんNGNG
で、標準Cライブラリで「大文字小文字を区別しない文字列比較関数」が規定されているのは
どの規格ですか?

早く提示してください。
0026デフォルトの名無しさんNGNG
ほーら もっと考えろ! > 25
googleしてもいいぞ ;-)
0027デフォルトの名無しさんNGNG
いやあ、考えようと何しようと、規定されてないものはどうしようもないし。
0028デフォルトの名無しさんNGNG
ところで10種類は?
0029デフォルトの名無しさんNGNG
strcasecmpが標準ライブラリに含まれる規格は?

はやくだしてよ。ぼけちゃん。
0030デフォルトの名無しさんNGNG
キャストをマークする目的で
#define cast(TYPE) (TYPE)
として使ってるのですが、これって一般的ですか?
0031デフォルトの名無しさんNGNG
>>30
#define begin {
#define end }

と同じくらい一般的。
003230NGNG
要するにしない方が良いということでしょうか?
ありがとうございました。
0033デフォルトの名無しさんNGNG
ふつう
#define begin {
#define end ;}
だろぼけ > 31
0034デフォルトの名無しさんNGNG
>29
UNIX互換端末で
man strcasecmp
を読め!
0035デフォルトの名無しさんNGNG
だから規格の名前を出せよ早く。いいかげんにしろよ。
ふざけるな。

この無知。
知ったかぶり。

寝ぼけてるんじゃないのか?
0036デフォルトの名無しさんNGNG
それから、いいこと教えてやるよ。

知らないことがあったら、http://www.google.co.jp/に単語を入れて調べてみるといいよ。
もしかしたら、教えてもらえるかもしれないよ。

どう?
勉強になったでしょ?

それから、strdupも標準じゃないんだよ。
知らなかったでしょ?
勉強になったでしょ?

それじゃあね。
もう少し勉強してから、偉そうなこと書こうね。
0037デフォルトの名無しさんNGNG
あ、「man」なんて名前のC言語の規格は、googleで調べてもどこにもなかったよ。
「UNIX互換端末」という名前の規格もね。

ボク無知だから、C89とかC99とかANSI-CとかISO-Cとか言ってもらわないと分からないの。
もう少し詳しく教えてよ。
0038デフォルトの名無しさんNGNG
素人はあきらめが早い。
0039デフォルトの名無しさんNGNG
manはmanualの略だぜ
0040デフォルトの名無しさんNGNG
> manはmanualの略だぜ

わー、すごーいー。
さすがー。
こんなすごいこと知ってる人が世の中にいたなんて。
感動しちゃった。

で、
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strncasecmp.3.html
どこに「標準C」と書いてあるのかな?
俺には読めないので教えてくれ。
0041デフォルトの名無しさんNGNG
こんな投稿もあるな。
http://tsukuba.m17n.org/mule-ja-archive/1994-9/msg00029.html
「名前」という日本語がの意味が分からない人には理解できないだろうが。
0042デフォルトの名無しさんNGNG
まあ、ぼけにつける薬は無いということで。
0043デフォルトの名無しさんNGNG
00:02:ae:3d:2d:xx こういうMACアドレスを表示させたいのですが
型の宣言は何にすればいいのでしょうか?
あと  %dとか%sのようなフォーマットを何にすればいいのかも教えてください。
0044デフォルトの名無しさんNGNG
UNIX「互換」端末なんていうものはない。
0045デフォルトの名無しさんNGNG
>>43
%p
99ページを読め!
0046デフォルトの名無しさんNGNG
>>41
懐かしいひとたちが...
0047デフォルトの名無しさんNGNG
>>43
printf("%02d:%02d:%02d:%02d:%02d:%02d", a[5], a[4], a[3], a[2], a[1], a[0]);
0048デフォルトの名無しさんNGNG
02dよりは02xだろうなあ。
004943NGNG
レスありがとうございます。
a[i]はint,long,charなどのどれにすればいいのですか?
0050デフォルトの名無しさんNGNG
>49
charでぴったりサイズ
0051デフォルトの名無しさんNGNG
>41
これが灯台レベルとしたら、大学の信頼ガタ落ちだな(k
0052v(^o^i)dNGNG
お前ら落ち着け
0053デフォルトの名無しさんNGNG
>>51
大学の授業なんか誰も当てにしてない。
0054デフォルトの名無しさんNGNG
int main(int argc, char *argv[]){
FILE *fp;
char keyword[80];
char line[256];
char* sp;
int size = 0;

if( argc<3 || (fp=fopen(argv[1],"r") ) == NULL){
printf("can not open file");
exit(1);
}
strcpy(keyword,argv[2]);
size = strlen(keyword);

while(fgets(line,256,fp) !=NULL){
sp = strncmp(line,keyword,size);
if(sp==0){
printf("%s",line);
}
}

fclose(fp);
return 0;
}

----------------------------------------------------------------------
文字列処理のプログラムなんですが、keywordが1文字だった場合、
keywordに空白を追加して文字列比較(strncmp)の処理を行いたいのです。
どのようにすればよいでしょうか?
0055デフォルトの名無しさんNGNG
>>54
strcat()
0056デフォルトの名無しさんNGNG
>>54
memset(keyword+1, ' ', 追加する文字数)[追加する文字数] = '\0';
0057デフォルトの名無しさんNGNG
if (trig==0)if ( Joy.Px > +65536/3 ) myx++;trig=1;
if ( Joy.Px > +65536/3 ) {trig=1;}else{trig=0;}

こいつをもう少し短くできないでしょうか?
005854NGNG
>>55>>56
ありがとうございました
0059デフォルトの名無しさんNGNG
>>57
//if (trig==0)if ( Joy.Px > +65536/3 ) myx++;trig=1;
//if ( Joy.Px > +65536/3 ) {trig=1;}else{trig=0;}
でいかがか?
0060デフォルトの名無しさんNGNG
>57
c=65536/3;
if(!trig&&Joy.Px>c)myx++;
trig=(Joy.Px>c);
006157NGNG
>>60
ありがとうございます。
短くなって見やすくなりました。
0062デフォルトの名無しさんNGNG
二次元配列を全て1で初期化するにはどうすればいいですか?
006362NGNG
訂正。

二次元配列を宣言時に全て1で初期化するにはどうすればいいですか?
0064デフォルトの名無しさんNGNG
1並べれば
0065デフォルトの名無しさんNGNG
>>63
static宣言し0を1とみなす。
006663NGNG
>>64
時間かかる。

>>65
良く分からないのですが?
0067デフォルトの名無しさんNGNG
>>66
馬鹿ですね。
0068デフォルトの名無しさんNGNG
>>63
64の方法以外では無理。
0069デフォルトの名無しさんNGNG
素直にmemset汁
007063NGNG
>>68
>>69
そうでしたか。お手数かけました。
0071デフォルトの名無しさんNGNG
もうこのスレも99か。ジョブズ3世ってどこいった?
0072デフォルトの名無しさんNGNG
俺が2ちゃん見始めた頃にこのスレ立ったんだよなあ。懐かしい。
0073デフォルトの名無しさんNGNG
>>65
static宣言のところは満年齢を採用し他のところは数え年を使用していると考える。

0074デフォルトの名無しさんNGNG
>>69
char [] にしか通じない罠。
0075デフォルトの名無しさんNGNG
しょうがねーPascal->C++変換でも作るか
0076デフォルトの名無しさんNGNG
質問します。
float や double は型を宣言するだけで速度が遅くなるんですか?
計算しないでも、型キャストなんてしてしまうと、それだけで極わずかの
遅延が発生するって事ですか?
教えて欲しいです。
0077デフォルトの名無しさんNGNG
>>76
変数を宣言するだけなら普通何もしないのと同じだから遅くはならないと思うが。
0078デフォルトの名無しさんNGNG
int型はサイズが小さくてCPUの中でもすぐに計算できるが、floatはそれより大きいし、int型などとはデータの構造が違う。変換に時間がかかって当たり前。
0079デフォルトの名無しさんNGNG
float型 を int型が同じ4バイトという環境なんですが、
それでも型キャストぐらいなら問題ないですか?
0080デフォルトの名無しさんNGNG
あ、データの構造が違うってことは、やっぱ遅れは発生するんでしょうね・・・
けど同じ4バイトだとしても、どうしてなのか不思議です。
計算して遅れが発生するのは納得がいくんですが。
0081デフォルトの名無しさんNGNG
>79
スーパープログラマじゃあるまいし、そんなにミリ秒の遅延が気になるのか?
0082デフォルトの名無しさんNGNG
>>81
ナノ秒ならともかく、
ミリ秒ならば、気にするべきかと・・・
0083デフォルトの名無しさんNGNG
float a=4.0, b=8.0 ;
b/=a ;
とかの演算だったら int型に変換してくれるっていう最適化は
コンパイラに標準でありますか?
0084デフォルトの名無しさんNGNG
ない、っつうか、bがfloatなのにintにしてどうする。
0085デフォルトの名無しさんNGNG
>>83
そんなことしたら大変でしょ。
float型をfloat型で割ったものをint型に代入する、なんていう式が真っ当な物とは思えない。
0086デフォルトの名無しさんNGNG
>>85
なんでだよ。
耐荷重M kgのエレベーターに、平均体重m kgの人が何人乗れるか、どうやって計算する?
0087デフォルトの名無しさんNGNG
誤解してるね。
0088デフォルトの名無しさんNGNG
ありがとうございます。
よく考えたらおかしいとわかりました。
0089デフォルトの名無しさんNGNG
小数点の切り捨て ってどうやって行ってるんですか?
やっぱ、単にシフトしてるだけなんでしょうか?
0090デフォルトの名無しさんNGNG
>>89
あの、えと、floatって浮動小数点数なんですが…
って、釣りですか。
0091デフォルトの名無しさんNGNG
>83
C++でfloatの前にconst付けると最適化されうる
0092デフォルトの名無しさんNGNG
>>91
なるほど!
0093デフォルトの名無しさんNGNG
>>90
つまり単なるシフトじゃないって事ですね。
じゃどうやってるんですか? マスキングかなんかですか?
0094デフォルトの名無しさんNGNG
93は忘れてください。
よく考えたらおかしいとわかりました。
0095デフォルトの名無しさんNGNG
マクロでループ処理ってできないんすか
0096デフォルトの名無しさんNGNG
>>95
出来るだろ。
009795NGNG
>>96
差し支えなければサンプル見せて下さい。簡単で良いです。
俺にはできんかったとです。
0098デフォルトの名無しさんNGNG
>>97
マクロはただの文字列置換。
マクロ内にループ処理を入れれば、
そのループ処理に勝手に置換される。

> 俺にはできんかったとです。

マクロの基本から勉強し直せ。
0099デフォルトの名無しさんNGNG
//古典的なやり方
#define REPEAT(stmt,n) REPEAT##n(stmt)
#define REPEAT0(stmt) #define REPEAT1(stmt) stmt
#define REPEAT2(stmt) \
do{stmt;stmt;}while(0)
#define REPEAT3(stmt) \
do{stmt;stmt;stmt;}while(0)
0100デフォルトの名無しさんNGNG
>>97
#define ENDLESS_LOOP while(1)

int main( void )
{
  ENDLESS_LOOP;
  return 0;
}
0101デフォルトの名無しさんNGNG
//近代的なヤツ
template<int n>
inline void loop(){
justDoIt();
loop(n-1);
}
inline void loop<0>(){}
■ このスレッドは過去ログ倉庫に格納されています