LEDの点灯プログラムの一部なんですけど 0x01 ^ 0xff とはどういう意味なのでしょうか?
3 :
デフォルトの名無しさん :2012/02/14(火) 18:54:18.84
そのくらい自分で調べろゴミ。
>>2 ^はxorで、両方のビットが同じなら0、同じでなかったら1になる演算。
それは0xfeになる。
>>3 ホントにゴミなもんですいません
>>4 ありがとうございます
助かります
>>6 何ヶ月か前も同じコード見た記憶があるんだけど、なんで何回もきくの?
8 :
デフォルトの名無しさん :2012/02/14(火) 19:53:09.84
9 :
デフォルトの名無しさん :2012/02/14(火) 19:53:12.95
c言語初心者です。 バブルソートの問題なのですが、前から順に入れ替えたいと思い、 以下のソースを作成したのですが、うまくいきませんでした。 どこに問題があるのか教えていただけるとありがたいです。 #include <stdio.h> int main(void){ int i,j,temp; int suji[]={2,5,4,3}; for(i=0;i<4;i++){ for(j=i;j<3;j++){ if(suji[j]>suji[j+1]){ temp=suji[j]; suji[j]=suji[j+1]; temp=suji[j+1]; } } } for(i=0;i<=3;i++){ printf("%d\n",suji[j]); } return 0; } よろしくお願いします。
>>9 値の交換が間違ってるのと(tempに二回代入してる)
最後の表示はjじゃなくてiを使う
>>9 値の交換はこうだろ。
temp=suji[j];
suji[j]=suji[j+1];
suji[j+1]=temp;
12 :
デフォルトの名無しさん :2012/02/14(火) 20:04:01.88
>>10 おっしゃる通りにしたらうまくいきました。
ありがとうございました。
>>11 うまくいきました。
ありがとうございました。
また機会があったらお願いします。
根本的におかしいところは指摘しないとかw
>>9 for(j=0;j<3-i;j++){
だな
20 :
デフォルトの名無しさん :2012/02/14(火) 20:43:53.08
バブルソートはK&Rで覚えた。
しかし、バブルソートなんて初心者には弊害しかねーんじゃねーか?
バブルソートなんて難解なモンを初心者たる
>>22 に教えるとその時点で挫折するので
弊害しかない
っていうことだろう
そういうことか でもそれで挫折するなら教えることがほとんど無いな
脱落する人は早めにあきらめてもらったほうが、お互い幸せだろう?
27 :
デフォルトの名無しさん :2012/02/14(火) 21:18:45.92
ソートは教えちゃいけねえんだよ 自分で思いつくまでの過程が大事なんだ
そうなのか。 バブルから選択ソート、マージ、クイックと何一つ自分で思いつけなかったわ。
そういえばビンソートは自分で思いついて天才かと思ったな。
選択ソートくらいは思いつくだろ
挿入ソートも配列二つ使うのなら割と自力で思い付けるよな
アルゴリズムの本にいろいろ載ってたから、自分で考える前に知ってしまったわ。
実はシャッフルの方が奥深い
そうと知ってればなあ。
35 :
デフォルトの名無しさん :2012/02/15(水) 00:34:29.02
だね
これは触っちゃダメだな そーっとしとこう
自分でソートを書かなきゃならないってことはまずないんだけど お手軽に実装できて動作が高速なコムソート(Comb Sort)はオススメ アルゴリズムが単純だから悩まずにスラスラかける
おれはそんな変なのより自分で書くならクイックソートのが簡単だな。
件数が十分少ない時はクイックソートよりしょぼいアルゴリズムの方が速い
41 :
デフォルトの名無しさん :2012/02/15(水) 01:56:50.27
へえ
クイックソートでやって、ある程度塊の件数が少なくなったらアルゴリズムを切り替えるような技もある。
だから何十年前の話だ。
どう考えても最後がクイックだろ。メモリアクセスが広範囲にわたるから小規模なソートは得意。
>>6 非の打ち所の無い完璧なソースですのでもう心配しないでくださいね。
挿入ソートは、ソート済みの配列に追加する際には重宝する。 NBASICの時代に、市販のマージャンソフトのソート部分を修正したのはいい思い出。
中央値だけを得るのに 部分省略した挿入ソート?で代用したことなら 9要素の中央値は ベタ展開で比較回数の工夫されているアルゴリズムがあるけど 要素数が可変だとすんげー面倒
メディアンフィルタとかの画像処理がらみですかね
そそ。 9要素中央値の出番はもろにメディアンフィルタです。 意味合いとして、値の変化の激しいところを維持しつつ ホワイトノイズを落とす って感じなので 別の1次元信号処理に応用しようとしたの(次元を可変にして)
今ならSSE使えばいいだけだな。
52 :
デフォルトの名無しさん :2012/02/15(水) 16:05:40.68
53 :
デフォルトの名無しさん :2012/02/15(水) 16:12:54.56
解決しました。
int c; c='X'; のとき cってのはXの文字コードをint型で代入してるだけで Xであるという事は記憶できるんですか?
88っていう整数を文字コードとして解釈すれば'X'。 c='X' は c=88 とするのと同じ。
>>55 でも
c=88;
と
c='X';
の時じゃ
isupper(c)が違います。int型って数字そのものを記憶するだけじゃないのでしょうか。
違うと思っているのはキミが何かを間違えている。
>>56 違わないよ。
intでもcharでも記憶するのは数値であって、文字なんか記憶してない。
88は「X」なっていう決まりにみんなが従ってるだけ。
まぁ、ASCIIじゃない環境でやってるのなら話は別だけどな。
>>57 その通りでした。c=3のとき0だったけどこれは対応が無いだけでしたね。
別にcがXを記憶していたのではなく、cの記憶していたint型の値から
isupperが文字コードに変換するという作業をしたという認識でよろしいでしょうか。
かぶった上に整形もせずしかも間違えててはずかしい
変換はしない。
>>64 文字コードのデーターベースに参照するという事でしょうね。
日本語でおk。
申し訳ありません。自分なりの認識の仕方です。
ゆとりらしいな。
言語から入るより、コンピューターの仕組みみたいなのを先にやったほうがいいような
70 :
デフォルトの名無しさん :2012/02/15(水) 17:38:51.29
最近のゆとりは「必要があれば覚える」ってスタンスだからそういうところからやらないんだよ そのほうが実質的で合理的、俺KAKKEEEEEEEEEEEEEEEEEEEEEEEEEEEとか思ってんだろ
#define C_SIZE 256 #include <stdio.h> #include <string.h> int main(void) { char c[C_SIZE], substring[C_SIZE]; int i, length; for(i = 0; i < C_SIZE; ++i) { c[i] = i; } length = 0x7E - 0x20 + 1;/* 0x7Eは、~のASCIIコード */ strncpy(substring, &c[0x20], length);/* 0x20は、半角空白のASCIIコード */ substring[length] = '\0'; puts(substring); return 0; }
>>70 まぁソフトウェアに限って言えば今は仕事ないでしょ?
コンピュータの仕組み知ってても就職ないし。
Turbo Dump Version 5.0.16.6 Copyright (c) 1988, 1999 Inprise Corporation Display of File 1.TXT 000000: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !"#$%&'()*+,-./ 000010: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0123456789:;<=>? 000020: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F @ABCDEFGHIJKLMNO 000030: 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F PQRSTUVWXYZ[\]^_ 000040: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F `abcdefghijklmno 000050: 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 0D pqrstuvwxyz{|}~. 000060: 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
必要があれば覚えるっていう本来は要領の良さによる賞賛されるべき能力が 単位を取ることにしか活かされてないってのが問題だね 勉学に励む上でこの能力を活かせばいいのに。
75 :
デフォルトの名無しさん :2012/02/15(水) 18:39:03.00
こういう構造体があったとする struct A{int width; int height; char* header; char* data;}; 実際にはこのようにインスタンス生成される(一例) struct A a = { .width = 20, .height = 20, .header = "%name=smile a=#CCCCCC b=#FFCCCCC c=#FFFF00 d=#000000", .header = "%name=brick a=#CCCCCC b=#FFCCCC"; .data = "aaaaaaaaaaaaaaaaaaaa" "bbbbbabbbbbbbbbbabbb" "bbbbbabbbbbbbbbbabbb" "bbbbbabbbbbbbbbbabbb" "bbbbbabbbbbbbbbbabbb" "aaaaaaacccccaaaaaaaa" "abbbbbbccccccccbbbbb" "abbbbcccccccccccbbbb" "abbbccccdcccdcccbbbb" "abbbccccccccccccbbbb" "aaaaccccccccccccaaaa" "bbbbbccccdddcccbabbb" "bbbbbabccccccbbbabbb" "bbbbbabbbbbbbbbbabbb" "bbbbbabbbbbbbbbbabbb" "aaaaaaaaaaaaaaaaaaaa" "abbbbbbbbbabbbbbbbbb" "abbbbbbbbbabbbbbbbbb" "abbbbbbbbbabbbbbbbbb" "abbbbbbbbbabbbbbbbbb" };
76 :
75 :2012/02/15(水) 18:42:00.94
訂正 .header = "%name=brick a=#CCCCCC b=#FFCCCC"; この行は不要
77 :
75 :2012/02/15(水) 18:54:06.14
>>75 を見れば、仕様はわかると思う。xpm系の亜流だと思う。(わからない人はいいです。さよなら)
BMP画像を変換して、この形式のCソースファイルとして出力するツールが欲しい。
pirntfでもFILE書き込みでも、なんでもいい。
とにかくこの形式に変換する簡単なツールでいい。
自分で書くの面倒なのでだれか書いてくれると助かる。
(ただし、標準C以外のライブラリーの使用はできないものとする。libbmp.aなどは使用できない制約)
簡単なものでいい。
制限が強くても構わない(たとえば256色パレットモードのBMP限定など)
自分でやれ
JavaとかC#とかならともかく、Cは所詮アセンブラの豪華なやつだし、 コンピュータの仕組み的な知識は必須だと思うな。 配列とか構造体とかも他の高級言語でいうような抽象的な構造じゃなくて、 メモリへのラベル付けみたいなもんでしかないし。
80 :
75 :2012/02/15(水) 19:01:49.25
詳細な仕様を調べて無いのでわからないのだけど、おそらくパレット数はアルファベットの印字可能文字数が限度な気がする。 ので、[a-zA-Z]の50パレット程度が限度と考えて変換すればいいと思う。 (複数文字で1パレットという表し方が可能かどうかは不明) 0-9の数文字はランレングスに使うとか言いかねないので、使わない方が無難な気がする。@#%あたりの記号文字も危ないので使わない方が無難だと思う。 (とにかく、まだ仕様が決まってない。よくわからない状態) とりあえず、BMPを50パレット程度の上記フォーマットのCコードへ変換して出力するツールを誰か書いてくれるとラクなのでお願いしますスーパーハッカーのみなさん
ちゃんと宿題スレで依頼しろよ
82 :
デフォルトの名無しさん :2012/02/15(水) 19:22:09.42
>>79 コンピュータの仕組み的な知識っていうけど、構造的な理解必要なの?
メモリってものがあるっていう理解以上に深いものはないでしょ。
int a=30;
なら何番地に30
string s="str"なら
何番地から何番地にかけてs t r
っていうね。
C言語でスレッドって出来るの?
>>83 プログラムカウンタ、スタックポインタ、スタックフレーム、スタック、ヒープ、
みたいな、実行時のイメージみたいなのは持ってる必要があると思う。
スタックポインタって何?
A7の別名
>>84 できるはず…?
実際は、C++コンパイラ(ライブラリ)をつかうとおもう。
たとえば、SmartWin
exitThread = fork(x, & KozuchiWidgets::ThreadWaitForObjectsCall);
これは、Cにみえるでしょ
C++Builder4のVCL(「TThread オブジェクトは,アプリケーションで複数の実行スレッドを作成できる抽象クラスです」)
>>84 Windows APIでは、
CreateThread()
TerminateThread()
ExitThread()
結局ライブラリ必要なんかwww Cって機能少ないなぁ
アセンブラを除いたら一番プリミティブな道具だもの
>> 77 (わからない人はいいです。さよなら) これにムカついたので作りません
93 :
75 :2012/02/15(水) 20:00:51.81
osがposix準拠ならpthread使える #include <pthread.h> #include <stdio.h> void* f(void* a){int i=100; while(i-->0) putchar(*((char*)a));} main(){ pthread_t a,b; pthread_create(&a, NULL, f, "A"); pthread_create(&b, NULL, f, "B"); pthread_join(a, NULL); pthread_join(b, NULL); }
C言語において抽象データ型って何でしょう? また抽象データ型の反対って何ですか?
Cには言語がサポートする抽象データ型っていうのはないんじゃないの? 自前で作ったものでシミュレートする事はできるだろうけど。 言葉的には抽象の反対は具象だわね。
96 :
75 :2012/02/15(水) 20:17:19.43
データを抽象化するためのテンプレートとなる抽象定義のメタ型となる型のことじゃね。 C++だと純粋仮想関数だけで定義したクラスを抽象クラスと呼ぶけど、それに近い概念のC版は知らない。
98 :
75 :2012/02/15(水) 20:20:10.59
wikiって専門用語はかなり難しい記述でなされてるね。 慣れないと分からんわ。
struct 構造体は抽象データ型じゃないの?
Cの構造体はメモリ領域へのラベル付け。 もちろんオフセットを使うよりは抽象的だろうけど、 抽象データ型ってのはそういうのじゃないと思う。
メモリ領域からキョリを感じさせるデータの扱いが抽象データ型?
charは何で文字型と呼ばれてるのか。
アスキー文字1文字入れるのに1バイト必要だからじゃね
intはじゃぁ4倍文字型じゃないのか
何でww int型はcharの4倍大きい容量でしょw
半端な知識/前提と普遍ゴッチャだと 配列 = 等間隔に一様なデータ並べた構造 と決め付けて掛かっちゃうからねー
いや、配列はそうだろ。 何が言いたいのか知らんが
111 :
デフォルトの名無しさん :2012/02/15(水) 22:27:53.09
自分自身が何の話をしているのか隠したままハッタリかます奴は いじめるとおもろいぞ
sizeof(int) >= sizeof(char) は確実だけど sizeof(int) == sizeof(char) * 4 は環境次第じゃないっけ
ていうかなんで型のサイズって規定されてないんですかね? C言語マスターさん教えてください
>>112 うん。
あと、intが16bit以上であることも確実
漢字とかのユニコードってint型で保持できるわけ?
>>113 いったん決めたら後から変えたくなっても変えづらいから。
今はbit数で型指定できるからそれで問題ないでしょ
C言語と相性の良いグラフィックライブラリって何ですか? 有償でインストールするのでお願いします。
>>119 漢字の型ってあるの?
kyara型とか?
まぁユニコードってとか言ってるやつが心配するこっちゃねーわな。
123 :
75 :2012/02/15(水) 23:41:50.67
文字コードが妙に複雑なのは、アスキーコードと互換性を持たせようとしてるのと、 記録容量ケチろうとしてるのが原因。 1文字4バイト固定の文字コードをアングロサクソンが受け入れれば、以降に書かれるアプリで文字コードの問題は未来永劫起こらない。
124 :
デフォルトの名無しさん :2012/02/15(水) 23:52:48.56
ふーん
16ビットでは不足していた。Unicodeは、拙速で失敗した
いつの時代だよ。
Unicodeのコードポイント1つは
字面上の1文字に対応するとは限らないので
>>123 みたいな発想は手遅れ
>>118 グラフィックライブラリ?
GUIではなくて? マルチメディアライブラリ? ハードウェアで高速描画?
有償のライブラリ?
もう、32バイトで一文字のビットマップ直接表現しようぜ。
頭、大丈夫か?
64bitの有能なパソコンだとC言語使ったら何か変わるの?
メモリがたくさん使える。
visual C++ダウンロードしたいのですが有償ですか? 古いのでいいのなら無償でインスコできますかね?
express
>>136 2010 expressを今ネトインスコしてます。
まじでドキドキします。
俺のPCで動くのだろうか。
138 :
デフォルトの名無しさん :2012/02/16(木) 02:46:12.85
ドキドキするね
起動遅過ぎだなぁ
マイクロソフトの人にdreamsparkのCD貰ったけど使ってないな
二つのint型変数の値を返したい場合は、構造体を返すのがいいのでしょうか。 それとも、それぞれを分けて、一つずつ値を返す関数を書くのがいいのでしょうか。 あるいは、その二つのint型変数をグローバル変数として宣言し、呼ばれる側の関数で処理をするのがいいのでしょうか。 ないしは、呼ばれる側の変数にアドレスを渡して、ポインタを使って直接アクセスするのがいいのでしょうか。 私は、ポインタを使って直接アクセスするように書いたのですが、この方法では呼ぶ側の関数で必要のない変数(二つのint型変数)を宣言しなければならず、これが少し気持ち悪い気がするのです。 こんなときはどのようにするのが一番いいのでしょうか。
配列で返せばいいんだよ
>>142 二つのint型変数の値を返すんだから、返してもらう方(呼び出し側)が器用意してあげないでどうする?
>>142 >呼ぶ側の関数で必要のない変数
それ値返す必要が無いんじゃね?
/* 新規ファイルの作成*/ void makefile(const char *filename) { FILE *fp; char in[5], out[5]; if ((fp = fopen(filename, "r")) == NULL) { fp = fopen(filename, "a"); fclose(fp); } else fclose(fp); output_data(in, out); output_file(filename, in, out); } /* 出勤、退勤の打刻 */ void output_data(char *p, char *q) { int i; for (i = 0; i < 5; i++) { p[i] = 0x00; q[i] = 0x00; } puts("出勤時刻の打刻"); printf("出勤時刻:"); scanf("%4s", p); puts("退勤時刻の打刻"); printf("退勤時刻:"); scanf("%4s", q); } /* ファイルに書き込む */ void output_file(const char *filename, char *in, char *out) { FILE *fp; fp = fopen(filename, "a"); fprintf(fp, "%s,%s\n", in, out); fclose(fp); }
>>144 これがソースなのですが、inとoutの値を返すのにはその器が必要ですよね。
ありがとうございました。
>二つのint型変数 待て。話が違うぞw
>>148 このソースでは数値を文字列として受け取り、あとからatoi関数で変換しようと思ったのですが、本当はint型のinとoutという変数を使いたかったのです。
すみませんorz
guidに文字を割り当てれば 全ての文字を表せる、おれおれ文字コードのできあがり。
>>142 もともと2つの整数をメンバーとする構造体(Win32のRectやPoint)が存在し、
それを返すことで見通しが良くなるなら、それを返してもよい。整数2つくらいなら問題ない。
その関数の返却値のために構造体を作ることは控えた方がいい。
>>148 ならば配列で渡す場合が多いと思う。
visual C++のコンパイラの名称って何て言うんですか?
Microsoft (R) C/C++ Optimizing Compiler って自称してる。
154 :
デフォルトの名無しさん :2012/02/16(木) 18:02:46.01
>>153 なるほど。
コマンドプロンプトでのコマンドはVisual C++独自のものってあるんですか?
は?
156 :
デフォルトの名無しさん :2012/02/16(木) 18:13:33.06
>>155 コンパイルするときのオプションコマンドですよ。
独自のものあるんでしょうか?
159 :
デフォルトの名無しさん :2012/02/16(木) 18:20:06.83
コンパイルオプション何てよっぽど高度な事しない限り必要ないと 思いました
161 :
デフォルトの名無しさん :2012/02/16(木) 18:31:49.54
>>160 ありがとう兄さん
でも使う事なさそうだね
>>161 使いまくるよ。
cl /? で一覧出てくるからどうぞ。
コンパイラーオプションを指定しないことは極めて稀。
ポインタのポインタアドレス
>164 "abc"の先頭アドレスと "def"の先頭アドレスが格納されている ポインタ配列の先頭アドレス。
167 :
デフォルトの名無しさん :2012/02/16(木) 20:31:14.77
visual C++だけど一つのsolutionだけで一つのプログラムしか 作れないの? helloworl.cppとgoodbye.cppの二つのC++file作って実行したい。
str[0]のアドレス。
プロジェクトを追加すればいい。
図解w str ↓ +--+ | →{ 'a', 'b', 'c', '\0' } +--+ | →{ 'd', 'e', 'f', '\0' } +--+
ああー、理解できました。 ありがとうございます。
/* gen.c
>>149 */
#include <stdlib.h>
#include <stdio.h>
void gen(int *pin, int *pout)
{
*pin = 142;
*pout = 149;
}
int main(void)
{
int in, out;
gen(&in, &out);
printf("%d\n%d\n", in, out);
return 0;
}
Rubyなら普通に二つ以上返り血もてるぞ
はいはいRubyスレにかえんな
175 :
デフォルトの名無しさん :2012/02/16(木) 21:30:24.97
visual C++でプログラム実行したときコマンドプロンプト以外に開く ウインドウが邪魔で仕方ない。 これ何でしょうか?
176 :
デフォルトの名無しさん :2012/02/16(木) 21:35:01.13
ドッキングで解決しました。 この欄なんですか?
>>173 あれは言語の意味論としては、メソッドがコレクションを返した上で代入時に分配してる。
真に複数の返り値 (多値) をもっている言語はやっぱり LISP くらいじゃないかなぁ。
どちらかが常に便利というわけではないけどね。
スレ違いスマソ
>>149 2つの値のペアに意味があるならstructにすればいい。
今回はstructにした方がいいケース。プログラムがそれなりに大きいなら
きっとほかにもメンバーが入るはず。
>>156 お前がいいたのはオプションじゃなくてコマンド名だろ。
コンパイラドライバの名前はclだ。
>>177 Occam2が持ってたな。a, b := c, d
パラレルプログラミングがとても簡単だったな。
多重代入はperlにもある。
※ロートさん大変なことに成ったね。独島守護天使ことキムテヒ(ロート雪ごこちテヒ)
2月19日 韓国は即刻竹島から?出て行け 日本国民大規模デモi?n浅草
日時 2/19(日曜日)【集合場所】金竜公園【集合時間】13:30【出発時間】14:00
デモ主催者のゆうさんがキムテヒをCMに起用するロート製薬糾弾も決定!
コールの一例
「ロート製薬は韓国の竹島侵略を正当化しているキムテヒをCMに起用するなー」
「ロート製薬は韓国の竹島侵略を認めた事になるぞー」
竹島の侵略不法占拠を続ける韓国と
その手先に成り下がったロート製薬への怒りを表明しましょう!! ロート不買!
http://www.nicovideo.jp/watch/sm16895198
javaとjavaスクリプトの違いって何ですか?
>>182 全然関係ない別の言語。
スレ違いだけど、だいたいスレ違いだからもう気にしない。
184 :
デフォルトの名無しさん :2012/02/17(金) 00:29:02.61
>>183 javaスクリプトってブラウザで動くアプリケーションのための言語って
いうイメージです。アプレットみたいな。
違いますか?
186 :
デフォルトの名無しさん :2012/02/17(金) 02:10:03.45
え
Cでハッシュのプログラムを書くとき、ハッシュのサイズ(ハッシュ値の取る範囲)は どう決めるものでしょうか。特に事前にトータルのデータ数がわからない場合に。 最初に決めたハッシュのサイズよりデータがはるかに多いと、ハッシュ値の衝突 が増えて性能が落ちますよね? そのためにはあらかじめハッシュのサイズを大きい 値にしておかないといけないのか、あるいは途中でハッシュのサイズを伸張する ようなことができたりするのかな、と...
標準ライブラリじゃないんだからそれはお前次第だ。
途中で大きくしてリハッシュするような実装も沢山あるよ。 サイズは素数がいいとか色々な説があるw
>>187 ハッシュ値は32bit程度でおk(32bitを超えるテーブルは使わないだろうから)
ハッシュテーブルの大きさに比べてデータが多くなったら
ハッシュテーブルを伸長して再格納するだけ
191 :
デフォルトの名無しさん :2012/02/17(金) 05:51:16.51
再格納するだけだね
分割コンパイルを勉強したいのですが、これを勉強するのは企業なり研究室に入ったりしてからなのでしょうか。 なかなか参考書には載ってない内容で、勉強するのが難しそうです。
そうですね。
>>188-191 なるほど。しかし再格納は効率を考えるとそれほど自明でないような気も...
やっぱテーブルが埋まってきたときに全エントリを一気にリハッシュとかしないですよね?
新規に大きいハッシュテーブルを用意する一方古い方も残しておいて、徐々に移行する
とか?
ちなみにこの手の処理で参考になるような文献とかコードとかありますかね。
>>194 リハッシュはそんなに重くない処理なので一気にやってしまう
徐々に移行させようとするほうが遅くなる
>>199 ふふふ、それが分割コンパイルを最初に習うには絶好の書籍だと考えているのです。
無関係ではありません。
201 :
デフォルトの名無しさん :2012/02/17(金) 08:47:50.11
/: : : : : __: :/: : ::/: : ://: : :/l::|: : :i: :l: : :ヽ: : :丶: : 丶ヾ ___ /;,, : : : //::/: : 7l,;:≠-::/: : / .l::|: : :l: :|;,,;!: : :!l: : :i: : : :|: : ::、 / ヽ /ヽヽ: ://: :!:,X~::|: /;,,;,/: :/ リ!: ::/ノ l`ヽl !: : |: : : :l: :l: リ / そ そ お \ /: : ヽヾ/: : l/::l |/|||llllヾ,、 / |: :/ , -==、 l\:::|: : : :|i: | / う う 前 | . /: : : //ヾ ; :|!: イ、||ll|||||::|| ノノ イ|||||||ヾ、 |: ::|!: : イ: ::|/ な 思 が /: : ://: : :ヽソ::ヽl |{ i||ll"ン ´ i| l|||l"l `|: /|: : /'!/l ん う ∠: : : ~: : : : : : : :丶ゝ-―- , ー=z_ソ |/ ハメ;, :: ::|. だ ん i|::ハ: : : : : : : : : : : 、ヘヘヘヘ 、 ヘヘヘヘヘ /: : : : : \,|. ろ な |!l |: : : : : : : : :、: ::\ 、-―-, / : : :丶;,,;,:ミヽ う ら 丶: :ハ、lヽ: :ヽ: : ::\__ `~ " /: : ト; lヽ) ゝ レ `| `、l`、>=ニ´ , _´ : :} ` / ,,、r"^~´"''''"t-`r、 _ -、 ´ヽノ \ノ / お ・ ,;'~ _r-- 、__ ~f、_>'、_ | で 前 ・ f~ ,;" ~"t___ ミ、 ^'t | は ん ・ ," ,~ ヾ~'-、__ ミ_ξ丶 | な 中 ・ ;' ,イ .. ヽ_ ヾ、0ヽ丶 l / ( ;":: |: :: .. .`, ヾ 丶 ! \____/ ;;;; :: 入:: :: :: l`ー-、 )l ヾ 丶 "~、ソ:: :い:: : \_ ノ , ヾ 丶
こいつが分割コンパイルの概念をはじめて見て驚愕したのがこの本なんだろう 鳥のインプリンティング並の脳みそしかないんだな
203 :
デフォルトの名無しさん :2012/02/17(金) 15:47:30.37
ハッシュ値は32bitってどういうこと? 32bitのパソコン使うってこと?
>>203 256bitのハッシュ値計算しても有効に使えないだけ
205 :
デフォルトの名無しさん :2012/02/17(金) 15:55:57.40
256bitのハッシュ値ってどういうこと? 恥ずかしながら..
どういうことってどういうこと? わけわからん。
207 :
デフォルトの名無しさん :2012/02/17(金) 15:59:14.64
QZって国立大出身? このスレの人で高卒プログラマーいる?
208 :
デフォルトの名無しさん :2012/02/17(金) 16:03:54.96
203bitのハッシュ値はないの? 256bitとか32bitとか64bitとか2の倍数じゃん。
ハッシュ関数 f(x) が返す値の範囲が 256bit長の値 ってことでしょ
256バイト入力して2048ビットのハッシュ出力してたら ハッシュの意味ねーからな
意味が無い?どうして?
212 :
デフォルトの名無しさん :2012/02/17(金) 16:12:15.27
>>210 単にハッシュ値が大きくなっただけでは?
>>210 2048bit 以上のデータを与えるケースも想定した上で
たまたま 256バイトのデータでした
というのも十分ありえる話です。
214 :
デフォルトの名無しさん :2012/02/17(金) 16:20:42.98
データを与えるという意味が分かりません。
215 :
デフォルトの名無しさん :2012/02/17(金) 16:23:58.98
一つのデータが2048bit? 存在するデータの総数が2048bit?
ハッシュ値で 2048ビットが欲しいとなると 少なくともデータ件数は 2048ビット以上ないとおいしくないんじゃ… →そんな件数想定しない →意味無い
衝突が起きなそうでいいじゃねえか
218 :
デフォルトの名無しさん :2012/02/17(金) 16:35:19.69
もうちょっと日本語分かりやすくしてくれ。 データを与える何ていう日本語は意味が分からない。 データがあるでしょうよ。
そこはわかれよ
220 :
デフォルトの名無しさん :2012/02/17(金) 16:50:04.36
おせえよw
222 :
デフォルトの名無しさん :2012/02/17(金) 16:52:25.21
↑ この文章も意味不明。 【一揃いの操作郡によって】は後のどの部分にかかってるのか不明。 日本語として正しいのかも不明。 後数理科学的って何だよ。数学的じゃだめなのかよ。 俺が馬鹿なのかもしれんが。
>>222 数学的なものをコンピュータで扱うのは無理ぽ
使い方だけ定義されてて仕組みや作り方が決まってないのが抽象データ型だよ。
225 :
デフォルトの名無しさん :2012/02/17(金) 16:54:57.11
>>223 哲学的だな。
とにかく俺は理系の適性が皆無な事が分かった。
院は行かず就職しよう。
そんな低レベルでよくコテできるな。
コテじゃありませんトリップです
まともな人間なら二度と顔を出せないくらいの恥を恥とも思わないクズだからな
大なり小なり自分の歴史を改ざんするから生きていける ただしこいつは大幅に度が過ぎてる
無かったことにするんだろ。改変じゃん。
存在を否定しませんし肯定もしませんわからないと答えるだけです
234 :
デフォルトの名無しさん :2012/02/17(金) 22:33:02.61
だけだね
235 :
デフォルトの名無しさん :2012/02/17(金) 22:50:45.02
だけどQZはポーランドだのネットワークだのコンピュータ用語に対する 理解が深いよね。 羨ましい。 俺何てプロバイダとサーバの違いがいまだに分からないんだから調べても。
自作自演かよ…
スルーしろよ…
しかし、RPNの電卓もなくなっちゃったねぇ。 全然欲しくなかったがw
239 :
233 :2012/02/18(土) 02:21:29.98
なんだそのコテ。
売ってるのか?
情弱乙。
244 :
デフォルトの名無しさん :2012/02/18(土) 08:44:28.70
245 :
デフォルトの名無しさん :2012/02/18(土) 10:02:09.47
なぜエラーになるんでしょうか? while((c = fgetc(file)) != EOF){ if(strcmp(c, ',')==0)printf('a'); printf("%c\n",c); }
わかりません
カスしかいないな。これくらいエラーメッセージ見なくてもわかるだろ。
引っ込んでろよ。
>>246-247 strcmpは文字列の比較。char *を渡さなきゃならない。この場合は==で調べりゃいい。
if(c == ',')printf('a');
あと、先回りして回答しとくと
char c;
じゃなく
int c;にすること。
while((c = fgetc(file)) != EOF){ if(strcmp(c, ",")==0)printf("a"); printf("%c\n",c); }
if (!strcmp(c, ",")) printf("a"); のほうが俺カッコイーwwってなる
252 :
デフォルトの名無しさん :2012/02/18(土) 11:35:39.06
>>245 です
うまく解決できませんでした
IF文のとこでこんなエラーがでます
assignment makes pointer from integer without a cast
strcmpにintを渡して良いって書いてある? マンコまんど読みなさい
/* useeq.c */ #include <stdio.h> int main(void) { int c; FILE *file; file = fopen("useeq.c", "r"); while( ( c = fgetc(file) ) != EOF ) { if(c == ',') { printf("a"); } printf("%c", c); } fclose(file); return 0; }
>>251 a == b → strcmp(a, b) == 0
a >= b → strcmp(a, b) >= 0
a <= b → strcmp(a, b) <= 0
↑みたいに覚えてるから!より==0が好きだわ。
0 == strcmp(a, b) これだけは絶対にヤダ。こういう書き方する奴殺したくなる。
痛風しました。 いてて
うむ
dwmに下記のコードがありました。 char *tags[TLast] = { [Tscratch] = "scratch", [Tdev] = "dev", [Twww] = "www", [Twork] = "work", }; これって、純粋なcの配列の定義のしかたですか? それとも,gnuの拡張とかでしょうか?
>>256 太古の昔、== と = の書き間違いをコンパイラに指摘させるために、
そんな風に書く流派があったのじゃ。ふぇふぇふえ。
>>256 jedのコードは全部そんなだったな
左辺値が即値だから代入できないし、むしろ推奨されるべき記法だろ
a == 0
は廃れて良い。
0 == a
の方が、はるかにマシ
>>261 コンパイラが警告を出すからそんな変な記法は不要。
-Werrorでおk。
なんで変なの?
これは恥ずかしいだろうなwww
>>260 アンカー間違えてごめんね。でもそれを知ってて殺したいといっているんだ。
>>267 俺も好きではないし、もう廃れたと思ってるよ。
>>264 「a == 0」は「a equal to zero(a はゼロと等しい)」…つまり、aを他の何かと比較するという意図が明瞭だが
「0 == a」は「zero equal to a(ゼロは a と等しい)」…つまり、ゼロを他の何かと比較するという意図にとれる
「定数を他と比較」したい、ということを意図しているならいいが、基本的には意味的に変にならないかな
C言語で作られた有名なアプリケーションソフトってどんなものがありますか? 自分はprintfで文字を画面に表示させるくらいの事しかできない初心者です^^
家にある本はK&Rの初版40冊だけなので、私も初心者です。
>>272 とりあえずUNIXかな。
もともとはUNIXを移植するためにアセンブラを書きたくない、って用途で
書かれたものだから。
>>265 c99の中の人、乙です。ポータビリティ考えて、大概はc89に合わせるだろ
冗談抜きで、c99の規格って、どこの業界で使われるもんなの?
>>272 速度が必要なもの全部。ブラウザ、エディタ、gnuplot、octave,...
ベンダや言語設計者の意志に左右されては困るもの全部。
AppleのObjective-Cだと、C部分はc99にするのがデフォ。
他には見ないな。
でも
>>265 はc99知らないだろw
>>276 LinuxカーネルでもFreeBSDカーネルでもバリバリに使ってる。
>>279 はぁ?c99で拡張された部分だぞ。本当にあるならコード張れ
自分ではブロックの最初以外で変数宣言するのくらいしか使わないけど。 配列とか構造体の初期化の書き方は便利だな。<初めて知ったw
>>281 ,283
Σ(゚∀゚ノ)ノキャー
FreeBSDもlinuxも、c99の規格以前からあるだろうから
拡張された機能のあるコードを、それまで以前のものと混ぜたがらないと思いますた...。
他にも、コンパイラがc99の機能をサポートしていないだとか、その他、諸々の事情で
使われることはないだろうと思ってますた。吊ってきまふ
言語仕様と性能は直接は関係ない。 性能はコンパイラの性能次第。
perlなどスクリプト言語でも、バイナリデータの入出力が可能だったら C/C++ソースのOSと大差ない性能出せる可能性はある。 チューニングに手間は掛かるが。 要するに言語と性能は直結してない。
>>287 perlがバイナリ扱えないとか。
お前、ちょっと恥ずかしすぎるからレスしない方がいいよ。
もしかしたらコンパイルの意味で「バイナリデータの入出力」って言ってるのかもしれんけど、 perlじゃどうがんばってもCなみは無理。
>>285 FreeBSDもLinuxもgcc前提だからねー
FreeBSDはgccから離脱する準備を着々と進めてるようだけど
実行ファイル、バイナリデータは0か1の羅列。 0か1(バイト列)を出力可能言語だったら、C言語ソースをコンパイルしたものと 同じ速度まではいける。
>>291 データとか基本テキストでもってて、実行時にコンテキストで判断して数値に変換したりしてるんだろ?
perlの言語使用じゃCなみは無理だろ。
アホか可能。 ネイティブ実行形式を出力するんだよ。 簡単にするには、必要最小限のアセンブラコンパイラをスクリプト言語で実装すればいい。 C/C++ ⇒ アセンブラの変換は既存のコンパイラでやったとして、実質的にはスクリプト言語で生成したファイルとなる。
コンパイラを作ればいいとかもう現実的じゃないなあ しかもCで書くのと同等の効率にするためにどんな頭のいいコンパイラを書けというのか
速度を出すためにはperl的な書き方を避けないと難しいんじゃないの?
原理としては0、1の出力が可能ならCコンパイラと同等のことは可能。 アセンブリ言語 - Wikipedia CPUが直接実行できる言語は機械語のみであるが、 機械語は数字(内部的には二進数)の羅列なので人間には理解しにくい。 そこで、機械語を直接記述するのではなく、ニーモニックと呼ばれる命令語でプログラムを記述することで、 人間により分かりやすくしたものがアセンブリ言語である。
C++ソースを、オールRubyのC++コンパイラや、オールPHPのC++コンパイラでコンパイルして 既製品のC++コンパイラの速度に追いつくことは原理的には可能。
>>296 現実的な解に到達するまでのコストを無視する原理主義者ですねお気持ちよくわかります
perl的なプログラムなら、結局perlのランタイムが必要になるから、 ネイティブコードにしてもあんまり速くならないと思う。 逆にperl的な書き方を避けて書けばC並の速度は出せると思うけど、 perlで書く意味はなくなってしまう。
CやC++やC99など言語によって速度や性能が決まるのでは無く コンパイラのチューニングで速度が決まると言いたい。 激遅のスクリプト言語でコンパイラを実装したとしても、チューニング次第では既製品を超える速度を出すことは可能。
コンパイラを実装するのは、どんな遅いスクリプト言語でやろうが、コンパイルが遅くなるだけで、出てくるオブジェクトには関係ないじゃん。
>>293 むり。
実行時にいろいろ処理の必要な言語仕様は、コンパイルしてもCなみにはならない。
言語仕様によらずコンパイルさえすればどの言語でもCなみになるってことなら、
JITの処理系のある言語は、起動時だけ遅くてあとはCなみに動かないといけないけど
JITコンパイラが研究されまくってるJavaでさえCなみにはなってない。
コンパイルさえすればどんな言語でもCなみになるって思ってる奴は、 「猿でもわかるコンパイラの作り方」みたいな本でも買って、動的型の言語がどう 動くか想像してみろよ。
> 多くのプログラミング言語はチューリング完全である。 チューリング完全 - Wikipedia 計算理論で、ある計算のメカニズムがチューリング機械と同じ計算能力をもつとき、その言語はチューリング完全であるという。 ラムダ計算はチューリング完全である。 これは、Yコンビネータによりラムダ計算の範囲内で再帰ができ、これがループと等価な能力をもつことから証明できる。 そのほか、μ再帰関数やマルコフアルゴリズムもチューリング完全である。 多くのプログラミング言語はチューリング完全である。 一見単純な機能しか持たない言語がチューリング完全である。 例としては、純LISP、Lazy K、Brainfuckなどがある。 正規表現はチューリング完全でない(チョムスキー階層も参照)。 SQLや、ループの書けない表計算マクロなども、チューリング完全でない。
死ぬほど遅くてもチューリング等価だからな。
EXEファイルの内部構造(PEヘッダ)
Windows実行ファイル「EXE」の謎に迫る
皆さんは、アプリケーションを起動させるEXEファイルの中身について考えてみたことはありますか?
本稿では、EXEファイルの内部構造について解説していきます。特にEXEファイルに関する日本語の資料が少ないのが現状です。
そのため、解析に手を出してみたいと思っても挫折してしまった方も少なくないのではないでしょうか。
本稿は、筆者自身の経験を踏まえ、実際にEXEファイルの解析ができるようになるための資料となるよう解説していきます。
http://codezine.jp/article/detail/412
>>307 遅さとコンパイラの性能は別だ。
動作の速いコンパイラが、速い実行ファイルを生成するとは限らない。
>>302 Cと同等のデータ構造扱えるようになれば可能かもしれないね。
でもそれは既にperlじゃなくなる。ハッシュ使わずにperlプログラミングしろとか。
ハッシュを使ってる限り、Cで最適なデータ構造で記述されたプログラムには追いつけない。
スクリプト言語で書かれたコンパイラの話をしてるのか、 スクリプト言語で書かれたプログラムをコンパイルする話をしてるのか、 どっちなのよ。
スクリプト言語で、既製品のCコンパイラの速度に並ぶ実行ファイルを生成することは可能って事だろ。
perl で書かれたC言語コンパイラの話をするバカを消してくれ
perlソースと同等のことを実現するCソースを作ることは原理的に可能。 すると、アセンブラの設計に行き着く。
>>316 sub foo {
my ($s) = @_;
return eval $s;
}
>>313 そのスクリプト言語の言語仕様によるけど、大概のLL系のやつは無理だな。
>>317 eval使わなくても、その$sの中に何が入ってるか分からないって時点で
Cみたいな最適化無理だわな。
>>316 perlソースと同等のことを実現するCソースを作ることは原理的に可能。
1 perlソースと同じくらい遅いCで書かれたプログラム
2 perlでは扱うことができないデータ構造を利用してCで書かれたプログラム
1も2も作成可能だが、perlソースから自動変換できるのは1だけ。当然2の方が早い。
perlか、文字化けが酷くて解決方法検索しまくっても結局わからず投げた。
インラインアセンブラのように既存仕様ではできないことを追加できるようすれば良い。 必要あればperlでその拡張perl言語を作る。
C言語で可能な事は、ほとんどのスクリプト言語で実現可能かつ速度も同等できるのは真実。 手間を無視すれば。
>>323 ほとんどのスクリプト言語でって、Rubyでどう手間をかけてもC並になるとは思えないけど。
C言語で生成したEXEをbase64に変換してRubyソースへ貼り付けバイナリ出力してみろ。 簡単にC言語並の速度を達成できることが確認できる。
>>325 ワロタw
実行ファイルの中身をソースに書いて出力するだけw
そりゃほとんどの言語でできるわなw
EXEの仕組みを知ってスクリプト言語でゼロからEXEを構築して出力すればアレンジがきく。
やっと言いたいことが分かったわ どんな言語でも実行ファイルを自分で出力するプログラムを書けば どんな実行ファイルも作れると言いたいのか それって実行環境ごとにプログラム変えなきゃいけないし 高級言語で書く意味ないだろ
いやさすがに、ジョークだろ? 実行ファイルのバイナリをソースに貼るとか、インラインアセンブラの機能をつければスクリプト言語でもC並ってのは。
大昔のパソコンのゲームとかそういうの実際にあったなw
アホが話をひっくり返しただけ
333 :
デフォルトの名無しさん :2012/02/18(土) 19:51:34.48
ブラウザもC言語にしたら早くなると思うんだけど プログラマーの皆からしてみればこのアイディアについてどう思う?
やってみれば?
さあ、がんばれ
ブラウザは最初からCとかC++あたりなんじゃないの?
ブラウザはCでできてるんじゃないの?
バイナリ入出力機能をつければC言語と同等まで高速化可能。
ブラウザにバイナリ入出力機能をつければC言語と同等まで高速化可能。
341 :
デフォルトの名無しさん :2012/02/18(土) 20:53:01.73
へえ
native client 流行らないかな。
流行らないよ はい次
日本語にバイナリ入出力機能をつければC言語と同等まで高速化可能。
こういうプログラムも書いたことないやつの言うことをいつまでも相手にするなよ。
つーかPEヘッダーの形式さえ知ってたら コマンドシェルからでもバイナリ実行ファイルなんて作れるだろ。
>>261 0 == aで良いんだが、見難い。
慣れの問題だと思うが。。
0 == aって中途半端。両辺変数だったらどうすんだよ。 #define EQ(a,b) ((a) == (b)) のほうがはるかにまし。
警告レベル高めにして警告が出ないようにコードを書くって基本的なことをするだけで防げるミスを わざわざ奇をてらってるような書き方するのってテクニックに走りすぎてるって言うか。 コードは素直に書くのが一番だな。
一番だね
>>349 警告レベルを高くしても出てこなかった時代の工夫じゃないのか?
>>351 >>261 みたいに、今でもしたほうたいいって思ってる人が話を振るから定期的にこの話がでてくる。
VisualStudio2010ExpressEditionでコンパイルしてます。 char hoge = 0xF0; printf("%X", hoge); とすると"FFFFFFF0"と出力されてしまいます。 printf("%X", (char)hoge); としてもだめでした。 "F0"という出力を期待してるのですが,%Xの指定ではまずいのでしょうか?
"%02X"
と思ったけどうそ。 unsigned char
%hhX
printf("%X", *(unsigned char*)&hoge);
char だと 0xF0 は -16 だから、int に拡張されても -16 => 0xFFFFFFF0。
"%02X" → "FFFFFFF0" "%hhX" → "FFF0" ("%X", (unsigned char)hoge) → "F0" unsigned charにキャストしてうまくいきました。 どうもありがとうございました!
バカにキャスト教えんな。
361 :
デフォルトの名無しさん :2012/02/19(日) 02:46:53.70
hogeとか使ってる基地害まだいるのか こういう公の場でホゲとか言って恥ずかしくないのかな 神経疑うわ
ちいせえ…
363 :
デフォルトの名無しさん :2012/02/19(日) 04:06:39.43
お前の…
foo, bar, bazでいい。 hogeとか間抜けすぎるな。
識別子にchinkoやらmankoやらunkoやら出て来ることすらある2chで何を言うのやら
そんなの2chでも見たことねーな。
368 :
デフォルトの名無しさん :2012/02/19(日) 05:46:19.29
/: : : : : __: :/: : ::/: : ://: : :/l::|: : :i: :l: : :ヽ: : :丶: : 丶ヾ ___ /;,, : : : //::/: : 7l,;:≠-::/: : / .l::|: : :l: :|;,,;!: : :!l: : :i: : : :|: : ::、 / ヽ /ヽヽ: ://: :!:,X~::|: /;,,;,/: :/ リ!: ::/ノ l`ヽl !: : |: : : :l: :l: リ / そ そ お \ /: : ヽヾ/: : l/::l |/|||llllヾ,、 / |: :/ , -==、 l\:::|: : : :|i: | / う う 前 | . /: : : //ヾ ; :|!: イ、||ll|||||::|| ノノ イ|||||||ヾ、 |: ::|!: : イ: ::|/ な 思 が /: : ://: : :ヽソ::ヽl |{ i||ll"ン ´ i| l|||l"l `|: /|: : /'!/l ん う ∠: : : ~: : : : : : : :丶ゝ-―- , ー=z_ソ |/ ハメ;, :: ::|. だ ん i|::ハ: : : : : : : : : : : 、ヘヘヘヘ 、 ヘヘヘヘヘ /: : : : : \,|. ろ な |!l |: : : : : : : : :、: ::\ 、-―-, / : : :丶;,,;,:ミヽ う ら 丶: :ハ、lヽ: :ヽ: : ::\__ `~ " /: : ト; lヽ) ゝ レ `| `、l`、>=ニ´ , _´ : :} ` / ,,、r"^~´"''''"t-`r、 _ -、 ´ヽノ \ノ / お ・ ,;'~ _r-- 、__ ~f、_>'、_ | で 前 ・ f~ ,;" ~"t___ ミ、 ^'t | は ん ・ ," ,~ ヾ~'-、__ ミ_ξ丶 | な 中 ・ ;' ,イ .. ヽ_ ヾ、0ヽ丶 l / ( ;":: |: :: .. .`, ヾ 丶 ! \____/ ;;;; :: 入:: :: :: l`ー-、 )l ヾ 丶 "~、ソ:: :い:: : \_ ノ , ヾ 丶
なんだニワカか
間抜け乙。
>>353 integral promotion(暗黙の型変換)により signed char 型→signed int 型に変換されたためそのような表示になりました。
char hoge = 0xf0;
char fuga = hoge & 0xff
printf("%X", fuga);
あるいは
unsigned char hoge = 0xF0;
でどうでしょうか。
372 :
デフォルトの名無しさん :2012/02/19(日) 06:37:18.89
char fuga = hoge & 0xff 無意味乙。 ほんと、お前何も理解してないんだからレスやめとけ。
どうしようもないバカだから仕方ない
まるでintegral promotionの日本語訳が暗黙の型変換であるかのような書き方はよくない
>>372 失礼。
int fuga = hoge & 0xff
でしたね。
>>374 ボーランドの解説はそんな感じでしたよ。
376 :
デフォルトの名無しさん :2012/02/19(日) 07:28:58.41
#include<stdio.h> int main(){ int a,b,tmp[3],i,j; for(i=0;i<3;i++){ tmp[i]=0; a = 0; b = 0; scanf_s("%d",&a,&b); tmp[i] = a+b; } for(i=0;i<3;i++){ for(j=0;tmp!=0;j++) tmp[j]/=10; printf("%d\n",j); } return 0; } これでキーボード入力で 5 7 1 99 1000 999 と入力しようとすると3行目で強制終了しちゃうんですけどどこが間違ってるんですかね?
まあ、「整数の上位型への変換」ぐらいが妥当なところでしょうか。
なぜ日本語の仕様書の記述を無視するんだ?
>>376 >scanf_s("%d",&a,&b);
バカな間違いしてはアホな言い訳ばっかり
言い訳ばかりだよね
>>376 >for(j=0;tmp!=0;j++)
>tmp[j]/=10;
ループの終了条件がおかしくてjが配列の範囲外までいくから
改行の扱いもな。 さて、いくつ間違いがあるでしょう的な。
そうだね
385 :
デフォルトの名無しさん :2012/02/19(日) 07:47:11.53
ダウトw
>>378 integer promotion の JIS の訳には批判的なものでね
なにがしたいのかよくわからない a+bの桁数を求めたいのか?
言い訳すればするほどバカを晒してくw
391 :
デフォルトの名無しさん :2012/02/19(日) 09:11:44.07
基礎もまともにやってないゴミが質問に来るようなスレ 初心者は初心者でも馬鹿は排除する方向で
質問する側は別になんでもいいよ 答えるほうが馬鹿だと荒れる
393 :
デフォルトの名無しさん :2012/02/19(日) 09:25:14.26
>>388 integral promotionの日本語訳としてはふさわしくないかもしれないねえ。
integer promotionの日本語訳として整数拡張は適切だ。
お前、自分が今まで間違えてた事を、必死になって検索して今日初めて気づいただろ。
本当にうんこだな。
>>393 integral には「積分の」という意味もあるが「整数の」という意味もありますね。
395 :
デフォルトの名無しさん :2012/02/19(日) 10:20:24.89
「整数のプロモーション」と「整数プロモーション」では意味が全然違う。 だから、「暗黙の型変換」なんてうんこ用語まき散らしたんだろ。w
397 :
デフォルトの名無しさん :2012/02/19(日) 10:33:26.06
promotionを変換と訳するセンスには何人たりとも追いつくことはできない。www
398 :
デフォルトの名無しさん :2012/02/19(日) 10:37:11.58
必死で検索してるねえ。でもpromotionを「変換」って説明しちゃったからねえ。 しかも鳥付だから、あれは自分じゃないという言い訳できない。www
どっちもお前らの考えを言うのは勝手だが、事実を先に述べてからにしろ 知らない人が混乱する JISでは「汎整数拡張」とか「整数拡張」と訳されている それを知ったうえで、ここで議論してる説明をどう理解するかはご自由に
草生えてるが、何があった?
401 :
デフォルトの名無しさん :2012/02/19(日) 10:48:33.42
>>397 ,398
突っ込みどころを変えてきましたね。integer/integral についてはご納得いただけたようでなによりです。
「暗黙の型変換」について問題にしてるんですか?昔のボーランドのマニュアルにはそう書いてあったんですよ。
さすがにこれは「必死に検索」してもでてこないでしょうねえ。
type promotion は type conversion の一種と考えれば、「変換」と訳するのはあたらずといえども遠からずでしょう。まずい、というほどのことでもないと思いますが?
元のは整数拡張をchar->intの暗黙の変換と説明してるだけだろ。 それを勘違いしてるのはお前。
ちなみにJIS規格では「暗黙の型変換」は「implicit conversion」の訳として出てくる で、「整数拡張」は「暗黙の型変換」のうちの一つ 過去のマニュアルがどうかなんて知らんが、さすがに同じ訳語を使うのはどうかと思う
405 :
デフォルトの名無しさん :2012/02/19(日) 10:59:36.19
>>402 > 突っ込みどころを変えてきましたね。integer/integral についてはご納得いただけたようでなによりです。
「integer promotion」を「暗黙の型変換」と訳したうんこ思考が理解できなかったからな。
てっきり、integerとintegralの取り違えだと思ったが、真相はもっと簡単だった。
まさかpromotionを使った意味を理解していなかったとは、想像の斜め上を行っていたよ。
promotionという単語を使ってる意味を理解してれば変換などと訳さない。
ボーランドのマニュアルはどこかの翻訳会社のうんこ訳。それを根拠にするとはまさにうんこ。
↓↓↓↓↓↓↓↓↓↓これが真相www
> type promotion は type conversion の一種と考えれば、「変換」と訳するのはあたらずといえども遠からずでしょう。まずい、というほどのことでもないと思いますが?
>>404 >さすがに同じ訳語を使うのはどうかと思う
そうですね。確かにimplicit conversion と integer promotion を完全同一視していたようです。ご指摘ありがとうございました。
407 :
デフォルトの名無しさん :2012/02/19(日) 11:02:02.14
まじかww そんなオチだったの? かんべんしてくれよ。
そしてまたこれがなかったこととしてしれっと出てくるクソコテ。
>>228
>>405 >てっきり、integerとintegralの取り違えだと思ったが、
どっちもこの場合は同じ意味の単語ですけど、どうやっったら取り違えたことになるのですか?
あと昔は integral promotion って言ってたのは前に述べたとおり。
そっちが無知なのでは?
410 :
デフォルトの名無しさん :2012/02/19(日) 11:24:12.04
> integral promotion(暗黙の型変換)により signed char 型→signed int 型に変換されたためそのような表示になりました。 これを見た瞬間、笑いをこらえるのに必死だったぜ。 そこで導いた結論が、integralの意味が分からずにそこで思考がストップして知ってる単語で説明したのだろうと。 うんこの思考を理解しろというのが無理。www なぜ、promotionなのか理解はできたのかな?
ちょっと、もうつまらないから終わりでいいよ。
自演乙
413 :
デフォルトの名無しさん :2012/02/19(日) 11:32:57.63
自演乙。 なぜ、promotionなのか理解はできたのかな?
いや、おれは
>>372 だから。
つまらんからまた別のネタが出るまでもういいって。
415 :
デフォルトの名無しさん :2012/02/19(日) 12:07:15.98
なんでポーランドが出てくるかと思ったらボーランドか。 お前の頭は何十年前で止まってるんだって感じだな。
QZが暴れてるって話か。 くだらん
何十年もやっててあれだから救いようがない。
今はインプライズコーポレーションって言うんだよ、おっさんども。
今っていつよ
お前ら、プログラミング以外だと生き生きしてるなw
>>415 Turbo Cにはお世話になりました。
424 :
デフォルトの名無しさん :2012/02/19(日) 13:02:39.78
>>420 なぜ、promotionなのか理解はできたのかな?
integer を 文字型に間違えるのは1人だけ
>424 integral promotion と integer promotion の違いは理解できたのかな?
427 :
デフォルトの名無しさん :2012/02/19(日) 13:45:17.35
>>426 integral promotion: うんこが「暗黙の型変換」と訳した。
integer promotion: これのJIS訳(整数拡張)が、うんこにふさわしくない(批判的なものでね)と貶された。
もういいって。 基地外の相手は次のネタまで待て。
関数のreturn値の型がstatic voidというのは、どういうことを意味しているのでしょうか。
>>429 その場合 static は関数を修飾して、関数がファイルスコープになる
そのファイル内でしか扱えない関数ということでしょうか。 ありがとうございます。
typedef static private; typedef extern public;
では次のネタを提供しましょう。
>>432 >typedef extern public;
extern なんていらない子。
#define extern
で必要十分。
やっぱりずいぶん昔で頭が止まってるみたいだな。
バカはバカのままだった
f(a)=b; f(b)=a; ただし常にa=bでないこと。になるような関数の例を何か。
>>436 void f(int x)
{
return ~x;
}
void じゃねー int だ
int f(int x) { return x^1; }
>>432 それコンパイルできる?
static, externだけでは型宣言として完結しないから、エラーになると思うが。
>>433 QZだから突っ込むわけじゃないですが、予約語を置換していいことは無いでしょ。
変数宣言に対してのexternも置き換えられるので、そのマクロ定義はまずい。
関数に対する、externがいらない子というのは同意。
既存のソースに使われていたから、スタイルを合わせた時以外に使ったことないわ。
>>439 相変わらず間抜けだな。
f(a) = f(b) = a = b = 1;
>>441 >関数に対する、externがいらない子
変数に対する exern もいらない子
それでエラーがでるのは外部変数を初期化している場合であるが、この初期化はコードとして記述すればよい。
やはりQZはクズ
>>443 >変数に対する exern もいらない子
グローバル変数宣言には必要じゃないですか。
externがついていないとリンクエラーになりますよね。
#define Z 2 int f(int b){return ++b%Z;}
449 :
436 :2012/02/19(日) 15:08:08.94
> a != b が前提なんでしょ? いいえ int f(int a){return a;} でないことがz ○ただし、常にa=bでないこと。 ×ただし常に、a=bでないこと。
>>446 なりません。extern をはずしてそのままOK。
ただし、宣言時の初期化はあきらめなければなりません。
なんであきらめなきゃいけないんだよ。 バカ?
前からそれ主張してるけど 変数の場合どれが定義でどれが宣言なのか一目でわかるためにexternをつけておくのが普通だ コンパイルが通るからいいとか言語仕様で省略できるからいいとかは自分一人の場合のみにしておくべき 個人的には自分一人でもそんなことしないけどね
>>451 うん、だからもうほっとけばいいんじゃない
extern不要論でスレ埋まってうざいわもう
QZがしつこいのはみんなわかってるだろ、餌を与えないで欲しい
毎回違う人が反応してるんでしょ いくらでも反対意見が出てくるくらい常識とは違う感覚の持ち主なんだよ
>>452 まっ、これはリンカに依存する、という結論でしたっけ。
たしかにこのネタ、もう使い古しですかね。
お前が痴呆なだけだろ。
自分のミスを関係ない話に逸らして誤魔化そうと必死だなw
458 :
デフォルトの名無しさん :2012/02/19(日) 17:51:26.36
QZはただの荒らしなんで
QZが人気者で羨ましくってNGを外して何書いてるか見たけど、 無駄なことしたな。と思うばかりだからもうNGを一時的に解除したりしない。 いいなーQZ
>>352 亀だけど。
>>349 はその記法が「奇をてらってる」し「テクニックに走りすぎてる」といっているので、
そうしないと警告なんかでは防げないころがあったし、そのころにとっては、
奇をてらった書き方ではなく、まさしくミスを防ぐための工夫だったんだよと伝えたかった。
lintが活躍した時代でもある。
先人の工夫を今必要が無いからといって、無駄な知識というならまだしも、奇をてらったという言いまわしは乱暴すぎないか?
>>460 その頃でも奇をてらった書き方だったよ。
工夫は認めるけど、ミスを検出できるメリットと見辛いと言うデメリットを比較して、
採用しないと言う奴の方が多かった。
いまだに FALLTHROUGH とか書かないと落ち着かないのは秘密 <lint
秘密だよね
可変引数ってなんなんでしょうか? 何故、解説書などには*argsって書かれているのでしょうか? argvというのもありますが、何が違うのでしょうか?
解説書読めば?
466 :
デフォルトの名無しさん :2012/02/19(日) 22:30:51.50
>>455 なぜ、promotionなのか理解はできたのかな?
printf や scanf みたいに引数に渡す変数の数が変わっても良いようにする機構
2800円台から積立をスタートしたが、現時点でトータルでみると3700円くらいか‥‥値上がりが早すぎる。
>>461 ミスを検出できるというメリット
見づらいというデメリット
のどちらをとるか、となれば当然「ミスを検出できるというメリット」をとるのが普通なのでは?
if (a = 1) { } は、先入観にとらわれた頭では、なかなかみつけにくい
お前さん、バグ鳥の苦労が足りないとみえるね
コンパイラが警告出す、で終わってるだろ アホか
当時そういう流派があってそれなりに認められていたのは事実だけど、 多数派ではなかったし、その後すっかり廃れたというのもまた事実。
グローバル変数をそのまま関数内で使用せずに引数として渡す書き方をよく見ますが、何か理由があるんですか? コードで書くと int ABC; int Function1(){ int rrr = ABC + 10; return(rrr); } ↑こうではなく↓のような書き方をしてFunction1(ABC)で呼び出す書き方をよく見かけます int Function1(int abc){ int rrr = abc + 10; return(rrr); }
#define と同じ効能を狙ってるんでは。 const とか付いてないの?
ああ、そういう話じゃないすね。ごめんちゃい。 関数自体は依存させたくないって事じゃないですかね。
レスどーもです まだあまりメリットデメリットがよく分かりませんがとりあえず先人にならって後者の書き方を真似しときます
>>472 関数をリエントラントにするためでしょうね。
リエントラントじゃない関数は状態を持ってしまうので、
メンテナンスが難しくなります。
また、これに関連しますが、変数の関係がわかりやすくなります。
// ==================
int a, b, c;
…
c = func(a, b);
// ==================
この方がcはa, bに関連している事をコードが主張しています。
func();の中で、勝手にa, bを参照して、cを更新されるようなコードは
わけがわかりません。
なるほど〜 リエントラント知らなかったのですがwiki見たら大体分かりました ありがとうございました
>>476 リエントラント解って無いのに無理するな
普通にテスタビリティだろ
ぬぉー 知らない言葉が次々と そんなに深い意味のある質問じゃないんでもう大丈夫です ありがとうございました、おやすみなさい
いえいえ
>>478 自信がないからコテはずしてんだろうねw
分かってなきゃレスしなきゃいいのに、自己顕示欲の強いクズだなしかし。
483 :
476 :2012/02/20(月) 07:01:13.57
>>482 私はここでコテつけたこと有りませんが、どなたと勘違いなさっているのですか?
>>478 リエントラントの説明をもう少し詳しくすべきか、と思いましたが、
>>477 ご自分で調べられたようですので結果オーライです。
言葉を合わせてQZのトリと言った方がいいのかな?
>>478 自信がないからトリはずしてんだろうねw
分かってなきゃレスしなきゃいいのに、自己顕示欲の強いクズだなしかし。
>>476 リエントラントが使われるようになったか。
じゃあ次はセマンティクスって言葉おいとくよ。
488 :
デフォルトの名無しさん :2012/02/20(月) 14:43:41.33
>>469 両側が左辺値だったら無理だろ
そういうトロいやつに限って
if (a == b()) で済むことを
わざわざ
c = b();
if (a == c) とかやって自己矛盾するんだよ
マトモな人に変なスタイル押しつけねえで
てめーがしっかりしやがれ
>>488 ヘルメットかぶってても死亡事故が起きるからヘルメット無駄と主張する人?
コンパイラが警告出すんだから変な記述で読みにくくするのはバカ。
シートベルトにエアバッグがあれば ヘルメットは無駄になるんじゃないかなぁ
レーサーはヘルメットしているが。 低脳の比喩は害しかないからやめとけ。
規約で指示されてたらそれに従う 個人的には 比較演算子の左側にチェックしたい側(主語に相当か?)をおきたいが 範囲内かの判定は 下限値 <= 変数 && 変数 <= 上限値 のように数直線的な記述のダブスタだったりする
そんなクズな規約があるのか。
本当にそんなものがあるのか知らんが、 おれならそんなクズな規約は変えるか範囲チェック用の関数を作ってそれを 使うな。
結局低能と罵るだけで反論はなしですね
>>500 それシートベルトと一緒に使うものなのか?
>>498 ==の左辺は右辺値にすべしというのが、死滅すべき一派の主張。
でも、両方左辺値だから無理。
主張するなら == は=と間違えないように
a + 0 == b
と書くべしと主張すべきだね。こんなルール言い出したらぶっ殺すけど。
アンカー間違えるな。>オレ。
>>489 ==の左辺は右辺値にすべしというのが、死滅すべき一派の主張。
でも、両方左辺値だから無理。
主張するなら == は=と間違えないように
a + 0 == b
と書くべしと主張すべきだね。こんなルール言い出したらぶっ殺すけど。
507 :
デフォルトの名無しさん :2012/02/20(月) 15:27:10.56
殺人予告ktkr
>>506 > ==の左辺は右辺値にすべし
これを主張してる間抜けな奴らがいるじゃん。
>>261 とか。
じゃ、「両方左辺値だったらどうすんだよ?」と聞くと黙っちゃう。
だから、代わりに答えてやった。
>>509 ?
左辺値についての言及しかないようだが
元は
>>469 だろ
> 469 名前:デフォルトの名無しさん [sage]: 2012/02/19(日) 23:33:26.75
>
>>461 > ミスを検出できるというメリット
> 見づらいというデメリット
>
> のどちらをとるか、となれば当然「ミスを検出できるというメリット」をとるのが普通なのでは?
> if (a = 1) { } は、先入観にとらわれた頭では、なかなかみつけにくい
>
> お前さん、バグ鳥の苦労が足りないとみえるね
>>469 を無視して今更
>>261 とか馬鹿じゃない?
別の話だけど、
>>482 には勘違いって言っておいて
>>484 には何も言わないとこをみると、
やっぱ
>>476 はQZってことでいいだね
>>510 「左辺値」、「右辺値」って知ってる? 知らなけりゃ参加資格ないよ。
>>510 左辺においてある値 と 左辺値 って意味違うですよ?
>>512 うん、知ってるよ。左辺値右辺値ごときでどや顔しなさんな
あとお前さんアンカーミス多すぎだから気をつけろよ
で、別に両方左辺値でも問題ないんじゃないの
そのときは残念でしたということで
左辺値右辺値をどういう意味で言っているのか。 関数の返却値、代入の値、、、 色々あるでしょ。 そこの所を誤魔化そうとしているように思うなー。
今時こんな話で盛り上がれるのはコンパイルもしたことない素人だけ。
517 :
デフォルトの名無しさん :2012/02/20(月) 15:48:22.49
>>511 大本は
>>256 (オレ)に食いついてきた
>>261 。
>>469 あたりには参加してなかったんだ。
そんなのどうでもいいけど、0 == aとか、a + 0 == bを強制したら、ぶっ殺すからな。
比較の過程で定数があるときだけ = とミスしても検知できるように 左側に置く それ以外は好きなように か。 一貫性に欠ける感じだが、記述ルールってそんなもんだったりするしなぁ…
>>518 お前、ろくにコンパイルもしたことないだろ。
521 :
デフォルトの名無しさん :2012/02/20(月) 15:56:07.84
Pro*cについて質問です .pcをプリコンパイルすると.cが生成されるんですよね。 コンパイル時にワーニングが出たら改修対象は.pcのソースファイルになるんですか?
-Wall -Werrorは基本だな。
>>506 a の型がvoid*の場合どうするの?
>>192 激しく遅レスだが、本格的に理解したいなら Linkers & Loaders じゃね?
分割コンパイルのメインは、makeなどのツールの使い方でC言語でない。 C言語でやることはプロトタイプなどの定義と本体を別々のファイルにするだけ。 難しいことはない。
makeのほかにcmakeとかAutotoolsとか多数のビルドツールある。すべてを使いこなすのは疲れる。 あえてチャレンジすることもない。IDE、マウス操作で代替可能。 ビルド (ソフトウェア) - Wikipedia ビルド自動化の一形態として、Makefileの自動生成がある。例えば、次のようなツールがMakefileを自動生成する。 GNU Automake CMake imake qmake Apache Ant Apache Maven
まあでもmakeはコンパイル以外にも使えるから使い方覚えといて損はない気がする
C言語でHelloWorldを表示するだけで分割コンパイル・ビルド使ってる訳だが。 stdio.hを読み込んで、関数本体をリンクするだろ。 それが分割コンパイルだ。標準関数はコンパイル済。
分割コンパイルのキモはモジュール設計。 ツールなんてアイちゃん訓練してやらせとけ。
どういった関数を公開し入出力インターフェースをどうするかは開発で重要だが。 分割コンパイルを動作させるだけなら、関数のプロトタイプをヘッダファイルへ書き込んでmakeファイルを作るだけ。 ソフトウェア品質は別のことだ。
そういった利便性、汎用性に関わる事はC++のクラス設計と共通する。 これはC++の標準機能だからC言語範囲外のビルドツールの勉強は不要。 クラスの勉強したら良い。
536 :
デフォルトの名無しさん :2012/02/20(月) 22:25:52.53
おまえらCPUは何使ってるの? おれはcore i7だが
Z80に決まってんだろ言わせんなよ恥ずかしい
オサレな68000
Amiga のCPUってなんつーのかな
コジャレた68000
6502はもらっていきますね
SC/MPだろJK
TLCS-12Aだろ
6809でUNI++動かしたのはいい思い出。
このくらいしか使ったことがない。 μPD8080AF, Z80, HD64B180, 6800, 6502, 6809, 68000, 68020, 68040, 8086, 80186, 80386, i386DX2, i486DX4, Pentium, Pentium Pro, i860, PentiumII, PentiumIII, PentiumIII Xeon, Pentium4, Core2 Duo, Corei7
MIPSが抜けてた。 R3000, R4000
PC88でUNI+動かした
アーキテクチャよりOS・文字コードとの戦いが主題だからな いまだにprintfがどーとかこうとかやってるようなスレじゃ
何の主題だ。
文字コードとの戦いにさえ至っていない様な
ランタイムライブラリってプログラミング組むとき意識する必要ないですか?
ものによる。
>>488 > if (a == b()) で済むことを
> わざわざ
> c = b();
> if (a == c) とかやって自己矛盾するんだよ
ううん。if (b() == a)ってやるんだよ。
>>521 ワーニングの内容はcに沿って出るけど、改修対象はもちろんpcだよ。
× ワーニング ○ ウォーニング
ナルポ
ウォニンじゃなくて?
ヲァニンのほうが近いか。
ワープする ( 宇宙空間のゆがみ[space warp]を利用して超光速飛行する ) ウォープ ( warp )
ワーニングは日本語
565 :
デフォルトの名無しさん :2012/02/21(火) 10:13:47.77
ウィルス
566 :
デフォルトの名無しさん :2012/02/21(火) 10:44:06.22
うほっ
567 :
デフォルトの名無しさん :2012/02/21(火) 11:03:54.72
C言語で四捨五入する関数がCランタイムにあると聞きましたが どうやってやればいいんでしょうか?名前を教えてください 引数がdoubleで戻り値がintな関数が知りたいです
round()ってC99だったのか・・・
0.5をたして、きりすてます
-1.5 では -1 にするの? -2 にするの?
そこまで考えてないから初心者なんだろう、察してやれよ
Round() 関数は四捨五入関数ではない
http://ichy.seesaa.net/article/2842259.html 最近接偶数への丸め は、端数が0.5より小さいなら切り捨て、端数が0.5より大きいならは切り上げ、
端数がちょうど0.5なら切り捨てと切り上げのうち結果が偶数となる方へ丸める。
JIS Z 8401で規則Aとして定められていて、規則B(四捨五入)より「望ましい」とされている。
単に「偶数への丸め」「最近接丸め」とも呼ばれる。
JISで定められていることから「JIS丸め」、あるいは同様にISO-31で定められていることから「ISO丸め」ともいう。
英語では、誤差の累積を嫌い銀行家が好んで使ったため「銀行家の丸め (bankers’ rounding)」ともいう。
端数処理 - Wikipedia
多くの環境で、最近接偶数丸めが採用されていたら、計算結果がC言語だけ異なると困るから合わせてくるはずだ。
Macのmanページから
DESCRIPTION
The round() functions return the integral value nearest to x rounding
half-way cases away from zero, regardless of the current rounding direc-
tion.
:
STANDARDS
The round() , lround() , and llround() functions conform to ISO/IEC
9899:1999(E).
Linuxのmanページ
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/round.3.html
>>576 知りもしないことはレスする必要ないよ?
579 :
567 :2012/02/21(火) 15:11:22.59
自分で書くとこんな感じの関数がCランタイムで欲しいです int func(double x) { if(x<0) return int(x-0.5); else return int(x+0.5); }
それでいいじゃんかw
>>579 int func(double x)
{
int v;
if(x<0) x-=0.5;
else x+=0.5;
v = x;
return v;
}
それそのままつかえ
1.4が0になって-1.4が0になるのか
ならないな すまん
うんこいってくる
0.5って無理数だから結果を整数変換すると微妙なんだよな
いや有理数だよ
>>587 0.5が無理数ってどんな世界に住んでいるの?
591 :
デフォルトの名無しさん :2012/02/21(火) 20:00:39.01
/ ̄\ | ^o^ | \_/ r彡ソ r_ノ!! r_ノ|| . ~ ←人間 r_ノ!| H r_ノ| r_ノ| 白ながすくじら r_ノ| ,......-..-―‐―--..r、_ | | ヾー-゚、 :::::::::::::::::::::::::_ ̄ニ`゙、 r、 | | ゙`ー-`ー'-ー'" ̄ `' . | ゙、 | | ├──────────| | ゝ | | | { | | ((((( ゆ ←まぐろ | | | | |-| { ヽ / / ヽ \_ / / ・ ←鰯 ヾ.  ̄ ̄ ̄ ̄_/  ̄ ̄"""゙゙`´ |───────────|
0.5は有理数だぞ 10進数 2進数 ------------------ 0.1 0.0{0011} 0.2 0.{0011} 0.3 0.0{1001} 0.4 0.{0110} 0.5 0.1 0.6 0.{1001} 0.7 0.1{0110} 0.8 0.{1100} 0.9 0.1{1100}
スーパー初心者ですが、以下の文は{ }でブロック分にしなくてもいいですか? #include <stdio.h> int main(void) { int a; printf ("1〜10までの好きな数字を入力してください:") ; scanf ("%d",&a); if (a > 10 ) printf ("入力された数値は10より大きいです!"); else if ( a < 1) printf ("入力された数値は1より小さいです!"); else printf ("入力された数値は%dです。\n",a); return 0; }
ブロック分は時間と用法を守って定期的に摂取してください。 タブ分の取りあかついには十分お気を付け下さい。
595 :
デフォルトの名無しさん :2012/02/21(火) 20:24:14.92
しなくてもいい 設計思想とかバイアスぬきで いいかどうかなら
597 :
デフォルトの名無しさん :2012/02/22(水) 02:13:20.94
いいんだよ 人間だもの
しっかし、
>>579 も
>>581 も。。。。
int func(double x)
{
if(x<0) {
x-=0.5;
} else {
x+=0.5;
}
return (int)x;
}
せめてこうだろ。。
まあ、自称玄人が三項演算使ったやつ書いてくれるよw
>>596 debugする時に必要になる場合がある。
gccに-O3とか渡せば一時的な変数は勝手に消してくれる
だから
>>599 含めお前らマジで言ってんのか?w
int(d)のような書き方ができるとでも思ってるの?
キャストは(int)dだろうが。。
>>569 のページはウソだから気をつけろよ
int int(double x);
のような関数を作ってあるなら別だがそうじゃないだろ?w
C++のページだからウソじゃないだろw
ウソじゃないどころか、C++じゃ正統だけどな。
>>601 低脳乙。
しかもreturnに(int)が必要とか思ってんのか。 色々と残念なやつだな。
>>601 C++知らなかったことは恥ずべきことじゃないけど、それにしてもreturn (int)x;はないわ
ヘボだからしょうがないよ。
Amiga Lattice C 4.0を使ってた俺は、 もう50レスぐらい前に来るべきだったな。
なんでC++が出てきてんの?このスレで…。
低能ばかりでわろた 質問する前にわかってよかった よそへ行こう
低能じゃないやつは質問しない
つまり、論理学でいくと質問するやつは低脳、ということだな。
人を馬鹿にするやつの伸びしろはたかが知れてるってことじゃない?
人に馬鹿にされるような、の間違いだろ。
まぁ、今時C++も知らないならそういうこったなw
まあ、C言語のスレでC++知らなくても問題はないさ ただC言語の知識ももっと欲しいとこではある
まぁ問題もあったわけだがwww
617 :
デフォルトの名無しさん :2012/02/22(水) 10:36:38.40
>>605 うわあああ。最高級に痛い奴が現れたなあ。
キャストは必要最小限にとどめるべきで、その少ない例外がdouble->intへのキャスト。
理由はコンパイラの警告を抑制するため。
Cを知らなかったことは恥だぞ。ここは「C言語なら俺に聞け」だからな。
>>618 ふーむ、それじゃ
>>598 を正しく書き直して見せてくれよ。
-Wall -Werror (VC++だったら -Wall -WX)は今時は当たり前だからな。
コンパイルエラーが出るようなみっともない書き方はしないでくれよ。
そうだね
嫌儲くせえ。出てくるなよ。嫌われてるのわかってんの?
623 :
デフォルトの名無しさん :2012/02/22(水) 18:07:35.36
警告とエラーが区別できない〜一緒にしたがるやつが定期的にわくな 微笑ましいことだ
型変換されるからなくてもいいけど、キャストを明示的に示すことに意味がないわけでもない どっちの言うことも極論すぎておかしい
おかしいね
うん、おかしいね
627 :
598 :2012/02/22(水) 19:47:05.88
お、おう。。 まさかこんなに return (int)x; が叩かれてるとは思ってなかったぞw
>>598 いや、こうだろ
int func(double x)
{
if(x<0) {
x -= 0.5;
} else {
x += 0.5;
}
return (int )x;
}
return (int)x; の問題点が何なのかわからない
>>629 それ自体にはあまり問題はない。
が、それがなければならないと思い込んでいるところが痛い。
>>624 コンパイラが心配性で警告だすんだよ。
-Wall -Werrorは当たり前なので、キャストしないとコンパイル通らない。
598.c(8) : warning C4244: 'return' : conversion from 'double' to 'int', possible loss of data
>>629 キャスト病に感染して治癒したばかりの初心者が、キャスト病感染者と勘違いして笑ってるんだろう。
rint()かround()でいいだろ。
キャスト病って何?
>>634 コンパイル通すために内容に関わらず何でもかんでもキャストする病気
新人がキャスト病にかかってプログラマ辞めた
今回の場合、int戻り値の関数で平気でdouble返すのは、 コンパイラがwarning出す出さないに関わらず気持ち悪いけどなぁ
>>636 元々向いてなかったんだよ。
早く気づいてよかったね。
そんな病気かかったことないぞ
int func(double x) { if(x<0) return int(x-0.5); else return int(x+0.5); } はよくて、 int func(double x) { if(x<0) return (int)(x-0.5); else return (int)(x+0.5); } はダメな理由がわかりません。
>>638 いや遅いよw 次から採用試験が強化されました
>>643 キャストのCの字も知らんアホを混ぜるようなクソテストやってるような会社、
そのプログラムのテストもやっぱりクソまみれの汚物、
そのクソを通過したお前も便所で仲間入りだよ
int func(double x) { if(x<0) return int(x-0.5); else return int(x+0.5); } だって int func(double x) { if(x<0) return (x-0.5); else return (x+0.5); } でいいだろって言われてもいいはずなのに一切おとがめなし。 でもキャスト病とか言ってる人は int func(double x) { if(x<0) return (int)(x-0.5); else return (int)(x+0.5); } はあり得ないと言ってる 好みでものを言ってるのかな。。謎。
同じ人がずっとはりついてるわけないだろ 2ch には俺とお前の二人だけしかいないってのを信じてるの?
>>644 意外とプログラムそのものの試験は無いって会社多いんだよ…
それまでは新人教育でどうにかなってたんだろうな
まぁ失敗だった訳なんだけど
まあ、Cのスレなんだし、ことの発端の
>>579 を忠実にCで表現するなら
int func(double x)
{
if(x<0) return (int)(x-0.5);
else return (int)(x+0.5);
}
ってことだろうね
C++知らないことを隠そうと必死www
どゆこと?
>>647 普通はそうだよね。
やめちゃったのはその新人の教育担当がまともにC知らなかったんじゃない?
ちゃんと説明されてそれを理解できる能力さえあればそんな変な病気にはかからないよ。
>>651 >ちゃんと説明されてそれを理解できる能力さえあれば
無かったようです。試験も大事ってことで。
>>652 もしそうなら基本的な力を見極められなかった面接とかの問題でしょ。
プログラムの試験なんてあんまりやっても意味ないよ。
プログラムしかしない派遣とかなら別だと思うけど。
>>653 採用担当じゃないから詳細は知らないけど、
情報系の学校を卒業してたからあまりチェックしなかったんじゃないかなぁと予想してる
試験に加えて面接も厳しくなったと思うけどね
そんなにプログラム能力が大事なの? それなら今までに書いたプログラム持ってきてで済むと思うけど。
>>645 ↓コンパイルできないコードしかかけないバカは死んでいいよ。
int func(double x)
{
if(x<0) return (x-0.5);
else return (x+0.5);
}
> int func(double x)
> {
> if(x<0) return (int)(x-0.5);
> else return (int)(x+0.5);
> }
> はあり得ないと言ってる
バカ? ありえないと言っているのはキャスト病が治癒しばかりの元患者(
>>605 ,617)。
>>655 成長してくれれば問題無いんだけどね
まぁ失敗談なんで
このスレでグチグチ言ってるのはお前だけということだ
>>656 だったら、最初から、俺に言わないで、return (int)x;はないって言ってるやつに言ってくれよ。
俺は、そもそもint戻り値の関数で、平気でreturnにdouble値なんか渡したりしないよぉ。。(´;ω;`)
なんでこんな喧嘩腰なんだろう てか紋切り型の表現しか使えないってバカなのかな
紋切り型の表現ってどういう表現のこと言ってんのかな。。
たぶん「バカ」とかだろ
あ、
>>660 も使ってるね
663 :
デフォルトの名無しさん :2012/02/22(水) 22:17:29.73
配列のあふれについてですけど、int aaa[10]のaaa[11]に 値を代入したとき、どういことが起きるのでしょうか。 osがぶっ壊れて最インストですか?
>>663 はみ出して書いたところは壊れる。
敏感な場所ならクラッシュしたりするし、鈍感な場所なら気づかない。
普通のOSなら最悪でもそのプログラムが死ぬだけ。
>>656 >↓コンパイルできないコードしかかけないバカは死んでいいよ。
コンパイルはできるよ。。
ただ、厳密には間違ってるけど言いたいことはわかるから
errorにしないでwarningでコンパイル通してあげるね
ってだけ
今時は-Werrorだからそんなコードをコンパイルもせずにコミットするやつは オイオイ、って思われるだけ。
ここまで食いつくって自分の恥を隠すためにやってんのかな
>>619 も
>>666 も-Wall -Werrorは今時当たり前って言ってるんだけど、それが当たり前になったのっていつなの?
聞きたいのは、それが当たり前じゃなかったのはいつごろかってことなんだけど。
-Werrorが当たり前ってどこの話?仕事?個人? 少なくともうちの会社でやってる世界では当たり前ではない わけもなく警告を残すことはないが
>>665 厳密にも間違えていないよ。
意図したものかどうかを確認したほうがいいと思ったから警告が出力されてるだけで。
>>669 仕事でも個人でもだな。
残さないなら-Werrorで問題ないじゃん。
よそから取り込んだので特にプラットフォーム非依存のコードなんかだと全部消すのが難しい事がある。
消すのにコストかかる場合そのまま放置とかやる 増減しないよう数をチェックするけど
675 :
デフォルトの名無しさん :2012/02/22(水) 22:52:20.10
あるね
>>669 警告をちゃんとつぶそうとは周知されてるけど、設定はそうなっていないのが実情だったりするなぁ。
make最後まで走らせたくないから自分の環境ではWerrorを含めていろいろ追加してる。
Wall Werrorは当たり前だろ、って騒いでる人がほかに設定してるオプションとか知りたいね。
間違ってなければ警告が残ってて何が悪いの? コンパイラのためのプログラムを作ってるわけじゃあるまいし。
小手先で無理やり消すくらいなら、環境変わったら問題が出そうな箇所として マークしておく意味で残しておくのも有りかも。
>>677 間違ってないことを確認する手間があるなら消すな。
みんなそれが確認できるレベルの人間だけで開発してるならいいんだけど、
確認できない低レベルも混じってるから-Werrorなんだよ。
>>680 せめて、何が間違ってるか言ってもらわんと。
今は職業プログラマーじゃないし、趣味ならどうでもいいわな。
警告を残すのが間違っている。
あ、ごめん。
全然間違ってない。 コンパイラに合わせてコード書いてるんじゃないんだから。
あっちのコンパイラでは大丈夫だけどこっちのコンパイラでは文句が出るってのもあるからねえ。
警告には問題のない警告と問題のある警告が混じってるんだよね。 で、製品のプログラムなんかだと数百万行になるから適当に書かれて出る警告 をいちいちチェックなんてできないのよ。 だから-Werrorで警告の出るコードはコミットさせないってルールが普通なんだな。
688 :
デフォルトの名無しさん :2012/02/22(水) 23:18:20.31
プログラム書き始めて数年経つけど 未だにCの入出力が一目でわからない %dとか
ageてしまった。申し訳ない
>>686 あくまで君のところでの”普通”だね
それがどこでも普通だと思わないほうがよい
void* に +1 したりしたいとき面倒だ
>>691 まぁいいんだけど、それは自分のところは品質が低いんですって言ってるようなもんだな。
普通とか常識とか語る奴の言うことは真に受けちゃダメ これ常識wwwww
>>687 コンパイラが変わるたびにコード修正するのか?
それはないな
>>687 最初から、将来ターゲットになるかもしれない全部の環境で完全なコードとか書けないじゃん。
-Werrorをつけないと警告の対処ができないようなところの製品ってどうなの
>>689 全くもっておっしゃるとおり。
コード書く以上Cくらいスラスラ読めるべきだと思うんだけど
初めに触れたのがC++で、いつまでたってもCに慣れないという
ただの愚痴でごめんね
>>695 もちろんコンパイラが変わるたびにコード修正するんだよ。
製品だと数年年に1回とかだけどな。
でもまあ、新たに書くコードにわざわざ警告仕込むのは確かに間違ってるよ
「-Werrorが普通」って言ってる人は根本を理解していない ルールに溺れてないか心配になる 「警告を出さないコーディングをする」のが普通というのならわかる
ああ、警告?もう一回ビルドすれば出てこなくなるよ^^ って人を何人も見かけてきた。それが職業プログラマ。 趣味プログラマのほうがきっちりしてることは多々あるよ。
>>702 そうそう。
単にWerrorでバカよけをすればいいなんて考えは、警告さえ出なければいいって発想をされる危険をはらんでるよね。
>>702 まぁそれは余計な心配だな。
お前はもっと自分の心配したほうがいいよ。
>>704 委託とかだとあまり外から言えないからねぇ
>>699 組み込みだと同じコードを年に何種類ものコンパイラでビルドするからねぇ
まあ警告なんてめったに出ないけど
>>677 ,
>>679 間違っているところが警告だけで通ってしまうとまずいからじゃん。
沢山の警告の中から、そういう致命的な警告をピックアップすることは人間には無理。
人間は必ず見落とす。だから-Werror
主張してることはまあわかるが バカ除けを何でもかんでも広めるのはやめていただきたい バカ除けはバカがいるところだけで使ってればよい
>>707 ミドルウェア系だとそうだね。
サポートするどの製品の環境でも警告出さないのが礼儀。
なんか白熱してるな まあすべて俺の自演だけど
複数の環境で使うコードとか、#ifdef の有効範囲の違いで、unused variable とか出るだろ。
716 :
デフォルトの名無しさん :2012/02/22(水) 23:36:30.27
そういえばプログラム板ってID出なかったっけ 久々に来たから忘れてるわ。
>>702 あまいな、経験4,5年か?「致命的な結果につながる警告メッセージは
オレは絶対見逃さないぜ」なんて本気で思ってるのか?
まぁコンパイラの警告消したところでチェッカーかけると何千個も警告出る のも普通だしな。 ある製品で2,3千個確認したが実際に問題があったのは10個程度。
>>717 -Werrorつけることには反対しないけど
警告さえ出なければ致命的な結果につながらない
と思うほうが危ない
>>719 警告だから問題ないと思うよりはましだろ。
ほんとに警告しか目に入ってないんだなw
コンパイラ自体どんどん口うるさくなってきてるから、 古いコード引っ張り出してくるとやかましく言われる事があるな。 んで64bit環境に対応させるのに警告が頼りになったり。
>>722 goto文を多用したコードが出てきたときの絶望感
>>721 コンパイラやチェッカーなんてあまりあてにならないぞ。
直接ヤバそうなパターンを探して確認した方がバグはみつかる。
コンパイラの警告は最低限、チェッカーは重要なやつだけチェックするのが
現実的かな。
MSコンパイラの _s 関数使えって警告は不要
>>723 幸いにしてgoto文を多用したコードなんて30年来みたことがない。
状態がラベルで遷移がgotoみたいな感じで、 ちょっとした字句解析やる事があります。ごめんなさい。
>>719 逆とか対偶とか夜間中学で論理学習いなおした方がいいぞ。
お前本当にPGやってんの? ウソだろ、頼むウソだといってくれ、
お前の書いたプログラムにいつか遭遇するかもしれないと思うとたまらなく不安だ。
また変なの、でてきた?
>>727 まぁ気持ちはわかるけどstateとswitch/case使った方がいいね。
上から目線のバカが涌いた
ごめんなさい。
つか、lexとか使えよ。
エスパーかw 一体どれにレスしてるんだ。
737 :
デフォルトの名無しさん :2012/02/23(木) 00:01:25.60
> unused variable 関数ポインタの宿命だしな Werror 君は見たことないらしいがw
goto文 上手に使って コーディング おいしいスパゲティー さあ召し上がれ
おれは -Wno-unused-parameter -Wno-unused-variable はつけてるな。unused-variableは仕事ではNGだが。
>>737 あ、ひょっとしてno-unused-parameter知らなかった?
パスタが食いたくなってきた...
わろたw ついに警告が出るとエラーになるから警告を消しやがったw
>>742 すまんが、関数ポインタの宿命ってのを教えてくれんか。
多分no-unused-parameterとは別のことを言ってるんだよな。
744 :
デフォルトの名無しさん :2012/02/23(木) 00:08:47.01
/*not reached*/もちゃんとつけてる?
なんだろうこの無駄な孤軍奮闘っぷり
746 :
デフォルトの名無しさん :2012/02/23(木) 00:12:11.17
>>743 その脳なんたらってのが ISO/IEC 9899 のどの箇条を言っているのか見当が付かんが
「使われていない変数」と関数ポインタの関連性は教えてやらんから憶えてきな
>>746 脳なんたらw
ISOを読む前に日本語を勉強してください。
まぁ物事の良し悪しの判断もできないなら人の言うことだけ聞いてろってこったな。
>>747 日本語より英語だけど、勉強するなら日本語からだなwww
今時は関数ポインタに宿命とやらがあるのか。それは知らんかった
おい、
>>742 その宿命とやらを是非教えてくれ。頼む。
752 :
デフォルトの名無しさん :2012/02/23(木) 00:21:45.49
日本語のレスにアンカー貼って日本語憶えろはねえだろ、ばか?
>>742 いないのか?それとも本当は宿命なんてなかったのか?
750=751=753 か 再読み込みしろよ
755 :
742 :2012/02/23(木) 00:23:56.08
教えてやらんつってんだろ、ばか?
>>744 NOTREACHED
FALLTHROUGH
www
>>755 まあ聞かなくてもわかるけどなw
って言ってるのと同じレベルだなw
761 :
デフォルトの名無しさん :2012/02/23(木) 00:26:55.17
>>761 そんなにバカを自慢しなくてもいいのに。
764 :
デフォルトの名無しさん :2012/02/23(木) 00:31:56.37
いや自慢してねえよ、アフォにしてるんだよ おい乞食、煽りそこなったら潮時をわきまえろ 無駄な努力だぜ
そうだそうだ
おまえら、ばかばか言い合ってるだけで、まったく何も生み出してない これを不毛という
量産できるのはゴミレスだけさ
ハゲちゃう。
ヘボです。
このスレももう潮時だな
このスレももう潮時だな(キリッ
そうだそうだ
ばかじゃねえの
ばかじゃねえよはげだよ
お前がな。
∧∧ ミ _ ドスッ ( ,,)┌─┴┴─┐ / つ. 終 了 │ 〜′ /´ └─┬┬─┘ ∪ ∪ ││ _ε3 ゛゛'゛'゛
はげはげいうんじゃねえよ
うるせーはげ
不毛
はげはげいうんじゃねえよ(泣)
結局関数ポインタの宿命ってなんだったの? 関数によっては不要な引数があるよってだけ?
783 :
デフォルトの名無しさん :2012/02/23(木) 00:45:55.05
別に引数なら省略すればいいだけだし、なんなんだろうね。 おれも知りたい。
こいつ
>>783 おっさんが拗ねてるみたいで気持ち悪いな。
ぷんぷんっ
おれもおれも
やっぱりバカ確定でFA?
なんでそんなにバカということにしたがるんだろう
バカじゃないふりをするからじゃない?
うるせーバカ
聞いてるほうも答えないほうもどっちもただのバカなのにな
793 :
デフォルトの名無しさん :2012/02/23(木) 00:54:16.96
>>784 今日一日粘着してたぼけの暴れ方見てみな
なんなのかはわかるだろうぜ
昔よりも上達したな あと200ちょいで1000いくぞ
そもそも今時関数ポインタなんてほとんど使わないしなぁ。
うんこ
>>794 使わない変数は書かなきゃいいんだよ。
でもそうすると引数の意味がわかりにくいから書きたい。
なのでno-unusedを使うわけ。
うんこ
くさい
>>800 宿命が何かわかったら書いてやるよwww
803 :
デフォルトの名無しさん :2012/02/23(木) 01:02:39.48
>>798 あれ、きみは Werror 君? その話とは違うぞ、ばかだなあw
てめーら全員トリップつけやがれたこ野郎ども
806 :
デフォルトの名無しさん :2012/02/23(木) 01:05:52.01
>>805 アンカーついてるのさえ読めないんだからつけても意味ないんじゃね?
お前ら全員鼻毛抜いて出直してこい
抜くより切った方がいいぞ
なみだちょちょぎれるからやだ
Werror と Warrior ってなんか似てるね!
特に鼻の穴直近に生えてる短い小作農どもを抜いたときの痛さは異常
813 :
デフォルトの名無しさん :2012/02/23(木) 01:21:13.42
宿命はよ
ない。以上。
815 :
デフォルトの名無しさん :2012/02/23(木) 01:25:28.57
宿命はよはよ
ないない。以上。
これもまた宿命
運命宿命だれのせい
That's the destiny.
820 :
デフォルトの名無しさん :2012/02/23(木) 01:28:44.06
-Werror すっかりトーンダウンしたなw
-Werrorなんぞ、つけたいやつはつけときゃいいんだよ つけることが目的じゃなくてバグゼロが目的だろ
手段は問わん、成果を出せ 以上 って言われておしまい
824 :
デフォルトの名無しさん :2012/02/23(木) 01:32:31.97
宿命はよ
>>822 それが目的だからつけるんだろ。
バグ0とか今時無理ゲーだけどな。
手段が目的に変わる好例だな デスマ乙
誰得 お前ステマ言いたいだけやろ。
×ステマ ○デスマ
829 :
デフォルトの名無しさん :2012/02/23(木) 01:41:22.44
宿命はよ
僕はclangちゃん!
832 :
デフォルトの名無しさん :2012/02/23(木) 01:46:25.21
-Werror も脳なんたらもこだわったところでしょせんローカルってとこわかったか、ばか
Fortify
>>832 メジャーだろうがマイナーだろうが結果が全てなんだよ
ローカルの反対はグローバルだろjk
そうだそうだ
>>832 おまえがローカルという言葉をグローバルの対義の意味で使ってないからだろ
その通りその通り
>>830 こういうやつが一番たちの悪いバグを仕込むんだよな。
840 :
デフォルトの名無しさん :2012/02/23(木) 01:53:39.34
>>837 グローバル? 変数の話でもしているつもりだったのか?
俺は ISO とは言った、そして突然 K&R C の話をしだした Werror 君の発狂ぶりに驚いている
どこにK&Rが?
そうだそうだ、どこにあるんだ
妄想乙。 って感じ?
844 :
デフォルトの名無しさん :2012/02/23(木) 01:59:17.58
そういう基本的なことは確認してから来い
845 :
デフォルトの名無しさん :2012/02/23(木) 02:00:55.57
宿命はよ
846 :
デフォルトの名無しさん :2012/02/23(木) 02:01:43.71
海はよー 海はよー オヤジの海はよー
このころ、
>>845 は
「宿命はよ」と永遠書き込み続ける宿命にあるということに
まだ気づく由もなかったのである
で、どこにK&Rが?
気づいてない気づいてない
850 :
デフォルトの名無しさん :2012/02/23(木) 02:05:32.84
もう限界 今日は落ちるぞ
まだ寝ないでよー
852 :
デフォルトの名無しさん :2012/02/23(木) 02:24:02.82
宿命とK&Rはよはよ
ちなみに宿命については俺もわからん
発 者 同 . 。_ ____ 争 生 同 .じ . /´ | (ゝ___) い .し 士 .レ .__/'r-┴<ゝi,,ノ ro、 は、 .な で .ベ ∠ゝ (ゝ.//` ./`| }⌒j .い し .ル } ⌒ /`ヽ、_∠l,ノ ・ヽ´ .! ! か の / ´..:.} >、、___, .r、 ソ、`\ / ..:.:.} / |∨ ` ̄ / ..:.:./ | 丶 / _、 ..:.:.:.{ .{.:.:. \ { ..:Y .ゝ、 {.:.:.:.:. ヽ |、 ..:/ 丿 .:〉 >.- ⌒ . ヽ / {. ..:./ ソ ..:./ .( ..:.:.:` ..:} ./..:.:}.:.:./ ヘ、 ..:./ .\ ..:.:r_,ノ、.:.:} ./..:.:/|.:/ {.:./ X.:.:}.} X X /..:.:/ .}.:| }:/ .Y丶ヽ Y.:Y . __/.:/ { } 《.〈、 _,,__>.:》丶 Y.:\ /.:.:.:.:.::/ !.:.:ゝ ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ \.: ̄>
なるほど、発生していることにしたいわけですね。
起きたら、-Werrorに反論できなくなったバカがマトボッククリを持ち出しててワロタ。
この言語で普段何を作ってる? ここの人は仕事でのみ
警告全部取りたい奴がいたら、止めはしないがな。 俺は御免って感じ。 アホみたいに、コンパイラのメーカーに問い合わせしてまで取るとか。 ご苦労様。
どっからそんな話が出てきたんだよw コンパイラの不具合なら問い合わせるの当然だろ。
重要な仕事なら、出来るだけ品質担保が欲しい、というのは当然だな。 趣味レベルなら個人の好き好きでやればいいこと。
てか、普通にコーディングしてたら警告なんてほとんど出ないでしょ。 なんでそんな拘るのかねぇ、いろいろ捗るのに。
警告表示したら何百も何千も表示されて、自分が気づいていない修正すべき警告に気づかないか、 少し手間がかかるが警告無しのコーディングをして、自分が気づいていない修正すべき警告をコンパイラに教えて貰うか、 どっちでも好きなように。
>>859 > アホみたいに、コンパイラのメーカーに問い合わせしてまで取るとか。
コンパイラメーカーに問い合わせしなきゃとれない警告ってどんなの?
もしかすると、それが「関数ポインタの宿命」ってやつ? www
スレが進みすぎててワロタ 元気だなおまえら、仕事は大丈夫なのか?w
866 :
デフォルトの名無しさん :2012/02/23(木) 13:03:29.66
うん
(アカン)
そうやってすぐなんJとかに影響されるのよくないと思います!
新規に書くコードは基本的に警告でないように核よ。 よそからもってきたのとか古のコードは必要もないのに手を入れたくないから 本当に問題のある部分だけしか直さないけど。
昔は社畜としてバリバリ仕事をしたもんだが、膝に矢を受けてしまってな
つまりアロー演算子で挫折したのか
へえ
874 :
デフォルトの名無しさん :2012/02/24(金) 02:21:39.35
入門スレで喧嘩を始めるゴミどもw
そうだそうだ
876 :
デフォルトの名無しさん :2012/02/24(金) 06:27:10.49
宿命はよ
宿便はよでろ
お、うんこと言えばQZ、 お前ならわかるんじゃないか?宿命。
月曜からの分を纏めて読んだらもよおした。宿便出してくる。
関数ポインタの宿命だろ。
うん
883 :
デフォルトの名無しさん :2012/02/24(金) 14:15:09.03
すみません、くそ初心者なのですが #include <stdio.h> int min_of(const int vc[],int no) { int i; int min=vc[0]; for(i=1;i<no;i++) if(min>vc[i]) min=vc[i]; return(min); } int main(void) { #define NUMBER 5 int main (void) { int c[NUMBER]; int j,min; printf("%dつの整数を入力してください",NUMBER); for(j=0;j<NUMBER;j++){ printf("整数%d:",j+1); scanf("%d",&c[j]); } min=min_of(c,NUMBER); printf("最小値は%dです。\n",min); return(0); } のエラーの原因を教えてください。
エラーメッセージをコピペしろとママに教わらなかったのか?
885 :
デフォルトの名無しさん :2012/02/24(金) 14:21:11.64
>>884 すみません。
list0607.c: In function `main':
list0607.c:26: error: syntax error at end of input
です。
>>885 int main(void)
{
が二つあるのはなぜだ?
そのままコピペしたと仮定すると int main(void) { を2回書いてる return(min); } int main(void) ←!!! { ←!!! #define NUMBER 5 int main (void) {
888 :
デフォルトの名無しさん :2012/02/24(金) 14:28:01.91
>>886 >>887 あ!!!しくじった…
ほんとだ、もう一回一から出直してきます。
こんなくそミスですいません。
ドンマイ。関数ポインタの宿命だから。
890 :
デフォルトの名無しさん :2012/02/24(金) 15:32:33.23
宿命はよ
そうだそうだ はよはよ
ほっほっ
C言語がコピペーの文化になっている件
コピペすんのと標準関数なりを流用するのは なんか違うことなの? コピペの手間省いてくれるのが標準関数なんじゃねーの? なんのためにJavaとかにあんだけのクラスあると思ってんの? perlのクソ大量のモジュールはコピペ専用機能だろ? お前アホの根性論主義者だからさ、 一生プログラミングには近づくなよ 業界のクズで癌で便器だからさ、 消えろよバカ
895 :
デフォルトの名無しさん :2012/02/24(金) 18:00:08.06
そんなことより宿命はよ
コピペ―が関数ポインタの宿命だから。
897 :
デフォルトの名無しさん :2012/02/24(金) 18:09:09.57
こういう絶対に動くはずのないコピペーがたまたま動いちゃうとか でてくるのが怖すぎる
関数ポインタの宿命ですから。
宿命だからしょうがない
そうだそうだ
こういうありえない行為が偶然に動いてしまうことがある
あるね
あるある
(unsigned char *)0xfffc2 unsigned char 0xfffc2 このふたつって同じ「0xfffc2番地の8ビットデータ」という 意味ではないのでしょうか 違いがわからないです
上: コンパイル通る 下: シンタックスエラー という大きな違いがある。
906 :
904 :2012/02/25(土) 00:15:52.59
解説書もう一度目通したら理解できました 早とちりですみません
907 :
デフォルトの名無しさん :2012/02/25(土) 00:28:31.83
グローバル変数にstaticつけても意味はない
急に何を言い出したんだ
>>909 まだ分割コンパイルできないんだ。わかってやれよ。
911 :
デフォルトの名無しさん :2012/02/25(土) 01:17:23.15
stdin stdout errno のように最初から使える変数がありますが、 これらはグローバル変数ですか?
そうだよ。
913 :
デフォルトの名無しさん :2012/02/25(土) 01:21:07.58
ありがとうございます! 初心者本でグローバル変数は危険、みたいな知識を植えつけられていたのでちょっと違和感でした。
極力スコープは狭めるべきであって、 グローバル変数は不用意に使わないのがよい、とは言われるが 使ってはいけないものではない グローバルに必要なものは当然グローバル変数とするのが妥当なことも多い
>>913 ちゃんと設計できる人ならグローバル変数を頻繁(正しく)に使う。
ちゃんと設計できる人ならグローバル変数を極力使わない方法で実装する。
ファイルスコープの変数はそれなりに使う。
>>915 言いたいことはわかる。
わかるが、グローバル変数を使うことをためらわない、の間違いではないか?
ちゃんと設計できる人なら goto を頻繁に使う。
そうだそうだ
921 :
デフォルトの名無しさん :2012/02/25(土) 05:07:23.01
宿命はよ
ポインタがわかんねえええええええええええええええええええええええええええええ 前橋の本読んでもわかんねええええええええええええええええええええええええええ
いまどきCは何処でも変数宣言が出来るんだから ポインタを全部const で使えばこんがらがる事は無いと思うんだがな
全部constつけろとか、お前全然理解してないなw
#include <stdio.h> int index_of(char *p, int c, int *s) { int mark; int i = 0; while(*p != '\0') { if(*p == c) { mark = i; } ++i; ++p; } *s = i; /* string length */ return mark; } int main(void) { const char c[] = "922 UFC 2012/02/25( ) 05:10:24.47"; const int NOT_FOUND = -1; int place, string_length; place = index_of( (char *)&c[0], 'U', &string_length); /* index of 'U' */ if(place != NOT_FOUND) { printf("index of 'U' = %d\nstring length = %d\n", place, string_length); } return 0; }
926 :
925 :2012/02/25(土) 08:31:52.89
#include <stdio.h> int index_of(char *p, int c, int *s) { int mark = -1; int i = 0; while(*p != '\0') { if(*p == c) { mark = i; } ++i; ++p; } *s = i; /* string length */ return mark; } int main(void) { const char c[] = "922 UFC 2012/02/25( ) 05:10:24.47"; const int NOT_FOUND = -1; int place, string_length; place = index_of( (char *)&c[0], 'x', &string_length); /* index of 'U' */ if(place != NOT_FOUND) { printf("index of 'U' = %d\nstring length = %d\n", place, string_length); } return 0; }
関数ポインタでハマる人はハマる
いいえ、運命です!!
930 :
デフォルトの名無しさん :2012/02/25(土) 09:46:54.27
宿命はよ
>>922 いいじゃん。C#とかjava,delphi,VBとかいろいろあるじゃん。
君の将来は明るいよ。
Delphiはポインタあるだろ、このヘボが。
>>913 stdin, stdoutあたりはともかく、errnoは失敗だからマネすんなよ。
扱ってるコードに setCameraDistance(btScalar(SCALING*50.)); というのがあったんですが、 50の右の . ってプログラム上の作用はないすですよね? 小数点以下のない整数だという意味を強調して 書かれているのでしょうか? あとbtっていうプレフィックスって何ですか?
あるよ。50はint、50.はdouble
>>935 btScalar()がプロトタイプなしでコールされていて、SCALINGが整数だったら挙動が違ってくるな。
普通はプロトタイプありだから、結果、. はあってもなくても同じになるな。
SCALING*50がintの範囲をちょうど超えるくらいだと .つけるつけないで変わるんじゃね
>>937-938 回答ありがとうございます。
そもそも数字の後につく . には、どのような意味があるのでしょうか?
付けるとfloat扱いになるとか?
940 :
935 :2012/02/25(土) 13:11:43.87
>>935 btの意味は使っているライブラリ(bullet)由来でした
errno って失敗なの? スレッド別変数がサポートされてる必要があるけど、すごい使いやすいと思うのに
なるね
>>941 C以降のメジャーな言語でエラーの種類をグローバル変数で返してるのってないから、
使いやすいって思ってるのは小数派なのでは?
946 :
デフォルトの名無しさん :2012/02/25(土) 13:56:40.58
他に例が無いから良くないとは なんとまぁ浅はかな
こき下ろすだけで自分の意見は怖くて絶対に言えない臆病者登場
うるさいしねや
そうだそうだ
>>944 そうかな?ああ、GetLastError などで間接的に取得してるのも含めて考えてたすまない
WinAPI の GetLastError、VB の Err、PHP/MySQL の mysql_error、…
まあ最近は例外が主力なのかなぁ
xcbのxcb_connection_tってどこで定義されてます?
>>951 VBとかPHPで使われてるって聞くと、よけいセンスのない方法なんだなって印象になるな。
>>953 VBはよく知らんがPHPはlibcのラッパーだから
>>954 Cの方式を踏襲してるんだろうな。
errno方式を採用してるのって、Cかそれの影響を受けたOSやライブラリかもしくはVB。
あんまり現代的ではないな。
#include <stdio.h> int main(void) { int i=0; printf("%d,%d,%d,%d,%d",i); return 0; }
959 :
デフォルトの名無しさん :2012/02/25(土) 21:04:58.58
OSが無かった時代でも、パソコンに標準装備されている開発環境って あったんですか?例えばCとか。
getoptを使ったオプション付きのコマンドライン引数の処理を windos上でVCで作ったC言語のプログラムで実現したいんですけど getoptに変わる処理としてはどうやるのが定石ですか
getopt Windows で検索
仕事のプログラムなのでgnuは使えません
普通の社畜養成場なら そこらへんのライブラリはひとそろいあるんじゃネーノ? そうじゃあないソフト会社なんてクソだぞ? それともお前はぶられてるから そのライブラリ先輩とかに貰ってないとか…… そういう悲しい事情でもあんの?
gnu互換のgetoptつかえ
ポインタと文字列についてお聞きしたいのですが #include <stdio.h> int main() { char s[ ] = "AB"; char *p = "12"; printf ("%s",s); printf ("%s",p); return 0; } このときC言語のルールとして ルール1、文字列リテラルを評価すると先頭文字へのポインタとなる。 つまりこういうことでしょうか? char s[ ] = &'A'; ルール2、添字演算子[ ]なしの配列はその先頭へのポインタとなる。 つまりこういうことでしょうか? printf ("%s",&'1'); それとポインタは printf ("%s",*p); みたいに * がないと、エイリアスにならないと思うのですが プログラム自体はあっています、すみませんがしくみというかこういう理解で合っているのかどなたか教えてください
> ルール1、文字列リテラルを評価すると先頭文字へのポインタとなる。 違う。 > char s[ ] = "AB"; = の右は初期化子と呼ばれていて通常の式ではない。 > ルール2、添字演算子[ ]なしの配列はその先頭へのポインタとなる。 これも違う。ポインタではなくアドレス。 ポインタならばa = NULL;が許される。
char s[ ] = "AB"; 書き換え可能な領域にAB\0が確保されてその先頭アドレスがsにセットされる char *p = "12"; 書き換え不可能なReadOnlyの領域に12\0が確保されてその先頭アドレスがpにセットされる コンパイラの人がそうやると決めてやってるからとしか
int main (void){ int i = 0 ; for (;i<7;i++) { printf ("%c ", "abcdefg"[i]) ; } } こういうクソまみれのコードも書ける
>>967 ルール1,ルール2とも文章自体はあっているぞ。
>ポインタではなくアドレス。
C言語的には「アドレス」などという概念は無い。
(その割には単項&演算子はアドレス演算子などと呼ばれたりするが、、、)
>ポインタならばa = NULL;が許される。
これは単に配列が代入可能な左辺値ではないからでしょ。
>>968 >>969 >>970 どうもありがとうございます、すみません理解が遅く
まずルール1は初期化なので代入ではないから、
評価されないという理解で正しかったでしょうか
975 :
デフォルトの名無しさん :2012/02/25(土) 22:11:15.60
> C言語的には「アドレス」などという概念は無い。 珍説ktkr
>>970 sは配列で、何かがセットされるものじゃない。
>>967 ルール1,ルール2の文章は合っているが、その解釈が間違いすぎていて
訂正もしようがない。
>それとポインタは printf ("%s",*p); みたいに * がないと、エイリアスにならないと思うのですが
エイリアスという言葉を、どういう意味で使用しているかわかりませんが、
サンプルコードで言えば
printf ("%s",p);で合っていますよ。
%sに対応する変数の型はchar *で、かつNUL文字で終端されている必要があります。
>>974 文法書を読むことを勧める
char a[] = "abc":
は
char a[] = {'a', 'b', 'c', 0};
と同じ。初期化は式はなくこういう記述もできる。
んじゃあ配列のための領域が確保されたあとにそこにAB\0がセットされるで満足か
>>973 >>977 >>978 すみません丁寧にありがとうございます、理解が悪いのでみなさんからいただいたレスをゆっくり見て
ひとまずもっと考えてみます、どうもありがとうございます
char a[] = "abc"; だと文字列がスタックに置かれる。
983 :
デフォルトの名無しさん :2012/02/25(土) 22:28:04.36
宿命はよ
グローバル変数もスタック消費するんだ知らなかったなあ
>>984 char *a = "abc"; と比べての話。
同じなのは
>>978 な。
それからchar *p = "12"はグローバル変数じゃないから。
コンパイラが出すコード見たことないと
>>982 のような不用意な発言するよね。
質問者がクローズ宣言してるんだからわざわざ出しゃばらなくてもいいのに。
いや、それはスタックに置かれるだろ。
もちろん、関数の中ならな。
「C実践プログラミング」 でCの文法、make、gdbなど、基礎を習得 ↓ 「C言語ポインタ完全制覇」 or 「秘伝C言語問答 ポインタ編」 でポインタに関して完全理解する ↓ 「エキスパートCプログラミング―知られざるCの深層」 でスタック、ヒープ、リンカ、ローダなど周辺知識を習得 ↓ 「C言語によるオブジェクト指向プログラミング入門」 で大規模プログラムの作り方を学ぶ ↓ 「C言語デバッグ完全解説」でバグに強いプログラムの記述法をマスター ↓ 「Code Complete(上)(下)」でより良いC言語プログラムとは何かを各人で考察する ↓ 神の誕生
992 :
デフォルトの名無しさん :2012/02/25(土) 22:34:29.70
宿命はよ
C90では自動配列も初期化していいんだっけ?
また珍説ktkr
例えばこうやったら、多くの環境では c の中身が'Z'になっちゃう。 かんすう() { char c = 'A'; char s[] = "abc"; s[4] = 'Z';
スタックに文字が格納された後にその先頭文字のアドレスがポインタにセットされると考えるべきなのか
あ
い
1000 :
デフォルトの名無しさん :2012/02/25(土) 22:38:41.90
宿命はよ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。