- 1 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 23:27:18 ]
- C言語の*入門者*向け解説スレッドです。
★前スレ C言語なら俺に聞け(入門編)Part 60 pc12.2ch.net/test/read.cgi/tech/1264920499/ ★過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000 ★初心者、初級者の方は他の質問スレのほうが良いかもしれません。 例えば 【初心者歓迎】C/C++室 Ver.72【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1267775473/ とか ★教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 134代目 pc12.2ch.net/test/read.cgi/tech/1263824755/ ★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ ★分からない事をなるべく詳しく書いて下さい。 ★ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ★開発環境や動作環境も晒すと答えが早いかもしれません。 ★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
- 149 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 11:58:44 ]
- すべてローマ字で書くことに決めたとしても、簡単なカタカナ語をどうするか悩む
どうしてもrisutoと書かなきゃいけないのか、listにしちゃいけないのか そして無意識のうちにlistと書いちゃってコンパイルエラー
- 150 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:00:28 ]
- >>148
両方やってみて違和感が少なかったほうにすればいいよ
- 151 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:01:36 ]
- あ、気に入らなかったらフォルダごと捨てれば大丈夫だから、神経質にならずにためせばいいよって意味も含んでるよ
最初は確かにいろいろそわそわしたなぁと思い出したので追記
- 152 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:25:15 ]
- ありがとうございます
オフにしてやってみます
- 153 名前:デフォルトの名無しさん [2010/03/09(火) 12:26:20 ]
- > 読みやすいプログラムはそれ自体英文として読めるプログラムだから
COBOL 屋かてめーわ
- 154 名前:デフォルトの名無しさん [2010/03/09(火) 13:52:42 ]
- 他人のコードを改造しているんですが
コードの量が大きいので一つの変数の型を変更するとそれに関連するものを変更する作業が大変です。 例えばint型だったものを制度をよくしたいのでdouble型に変えたとします。 それに関連する関数の戻り値や引数、代入される変数等、膨大な数になってしまいます。 なにか自動で型を変換する方法ってありませんか?
- 155 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:09:54 ]
- typedefしておけばいい
- 156 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:33:17 ]
- 理解力がなくてすみませんがtypedefでどう解決するのでしょうか?
- 157 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:42:44 ]
- 全部変えてしまうのは、まずいだろ
見ながら1こ1こかえるしかねーべ、そういうものとあきらめて
- 158 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:47:01 ]
- mozillaではパーザで構文木作ってそれを木の変換技法を使って自在に書き換えするっていうのを
javascriptで作って、それをコードメンテに使ってるみたい dehydraとかいうやつだっけか
- 159 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:08:52 ]
- 検討の例えで整数変数を実数に入れ替えにしてるのは
釣りかい?
- 160 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:14:02 ]
- んだなぁ
(x == y)みたいなのは、型を変えただけじゃだめだしなぁ 結局>>157しかないな
- 161 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:21:18 ]
- たとえばビット演算を使っていたりしたらアルゴリズムから検討する必要が出てくるので
自動でやるのはとても不可能だろうなあ。
- 162 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:22:10 ]
- , -‐−-、 ヽ∧∧∧ // |
. /////_ハ ヽ< 釣れた!> ハ レ//j け ,fjlリ / ∨∨V ヽ h. ゚l; ハイイト、"ヮノハ // |::: j 。 /⌒ヽヾ'リ、 // ヾ、≦ ' . { j`ー' ハ // ヽ∧∧∧∧∧∧∨/ k〜'l レヘ. ,r'ス < 初めてなのに > | ヽ \ ト、 ヽ-kヾソ < 釣れちゃった!> . l \ `ー‐ゝ-〈/´ / ∨∨∨∨∨∨ヽ l `ー-、___ノ ハ ´ ̄` 〈/‐-、
- 163 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:32:51 ]
- すいません、苦Cの事を一通り覚えた後は何をしたらいいでしょうか?
- 164 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:35:48 ]
- >>163
アルゴリズムとデータ構造が少ない希ガス
- 165 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:41:12 ]
- コマンドラインで動作する素数判定プログラムprimeを作っているのですがうまくいきません。
コマンドラインオプションでの整数取得・切り分けがうまくいかないです。 助言お願いします。
- 166 名前:154 mailto:sage [2010/03/09(火) 16:59:15 ]
- 多くのレスありがとうございます。
全intをfloat(double)に変換するとか強引な方法をとってはダメでしょうか?
- 167 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 17:04:35 ]
- 駄目かもしれないしOKかもしれない
なんでそんなことわかるの? でもきっとコンパイルエラーがわんさか出るだろうな sprintfとかの辺とかビット演算の辺とかまずそう switch文とかもまずそう サイズをsize_tじゃなくてintでやってるところとかあればまずそう 戻り値をintでエラーで分岐してたらまずそう
- 168 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 17:04:56 ]
- ダメだって書いてあんだろーが
- 169 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 18:19:45 ]
- #include <stdio.h>
void hack(void){ printf("実行可能\n"); exit(0); } void func(void){ int iArray[2]; iArray[4] = (int)hack; } void main(void){ func(); } VC++のDebugで、 どうしてこれが実行できてしまうのでしょうか?
- 170 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 18:42:09 ]
- そういう風にできてるから
- 171 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 18:44:52 ]
- >>165
つ codepad 瞬殺でアドバイスが得られると思います。
- 172 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 19:15:01 ]
- 運がいいから
- 173 名前:165 mailto:sage [2010/03/09(火) 19:53:43 ]
- 素数判定ではなく素因数分解factorでした
ttp://codepad.org/ESKYLo9R うまい具合に引数を整数にしたいです。 例えば、 factor 123451234512345 のときも動いてほしいです。 OSはwindows vistaでコンパイラはgcc、バージョンは gcc version 3.4.5 (mingw-vista special r3) です。 その時のint型(4bytes)の上限は +2,147,483,647 (10桁)です
- 174 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 20:23:07 ]
- >>173
gmp みたいな多倍長整数ライブラリを使う
- 175 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 20:40:07 ]
- 引数は整数になってると思うけど桁数を増やしたいって話?
20桁未満ならgccはlonglong使えるんじゃないか
- 176 名前:165 mailto:sage [2010/03/09(火) 21:15:02 ]
- >>174
試してみます。 >>175 桁数を増やすのと、 例えばint型を使っていて、 引数argv[1]がその上限を超えたときに エラーにしてくれるようなチェック方法を知りたいです。
- 177 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 21:45:35 ]
- >>176
コマンドラインオプションの解析は getopt(3)でいいんじゃない? 自分で判定するのは面倒でしょ。 パラメタを整数にするのも、strtol とかstrtoll あたりでいいかと。 上限超えたらどうなるかは、man 見れば載ってると思う
- 178 名前:デフォルトの名無しさん [2010/03/09(火) 23:12:10 ]
- ヘッダファイルで
#define RED 1 #define BLUE 2 ..... #define YELLOW 100 と数百個定義しているのですが(全部定義しているわけではない) 結構順番を入れ替えます.そこでインクリメンタル的なものをつかえないかと思っているのですが, よい方法ございますでしょうか? よろしくお願いします.
- 179 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 23:14:01 ]
- enum
- 180 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 16:36:16 ]
- ヒープメモリとスタックメモリって読み書き速度に差はあるの?
- 181 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 16:37:55 ]
- >>180
スタックは頻繁にアクセスされるためCPUキャッシュに乗った状態の可能性が高い
- 182 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 17:09:32 ]
- スタックもヒープも物理的に差はない。
C言語がやりくりする一定値のメモリがスタック。OSに問い合わせしないので解放取得が速い。 ヒープはOSに問い合わせる。 スタックもプログラム開始時にOSに問い合わせて取得する。 OSはこの二つの違いは認識しない。使われていなければ、スタックでもページアウトする。
- 183 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 17:12:31 ]
- 100Mとか多めに確保したヒープにランダムアクセスしたら遅くなるが
確保できたとしてスタックでも同じ程度の速度。 はじめに一定値を確保してあるか無いかの違いだけ。
- 184 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 17:13:31 ]
- スタックはメモリプールという機能と同じってこと。
- 185 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 17:28:47 ]
- Windowsを初め、比較的新しいOSではスタックも追加確保
されるる時にOSに問い合わせます。
- 186 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 17:31:37 ]
- XPはスタックオーバーフローするが。
vistaからはそうなったか。
- 187 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:12:17 ]
- >>185
OSが許容するスタック上限値よりずっと低いスタック量で プロセスを起動しても、行儀の良いプログラムだったら 問題がないんでそうしてるわけですね。 少し「仕事をする」(再帰とか使ってたり、ローカル変数に 配列とか大量に確保する)プログラムだったら当然それでは 足りないからスタックオーバーフローする。そのタイミングで OSはスタックを追加してプロセスを停止させず続行するわけ です。
- 188 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:30:49 ]
- OS的には、変数は極力グローバル変数に確保し、再帰を使わない
プログラムであることを望んでいるというわけですね
- 189 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:43:30 ]
- OSはスタック追加などしないぞ。OSから見たらカタックとヒープの違いはない。
MS-DOS Windwos3.1では区別はあったとおもうが。 Windwos3.1はスタックの固定領域を指定して使い切ったら駄目だった気がする。
- 190 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 19:00:26 ]
- MS-DOSにおいて、カーネルを含むプログラムの実行に確保できるメモリ空間(コンベンショナル・メモリ)は8086のアドレス空間の最大1MBである。
ほとんどのコンピュータでは、この空間にBIOS ROMやメモリマップドI/O、VRAMなどの空間も存在するため、 アクセス可能なメモリ空間は最大でも640KBから768KB程度であった。 ただし、バンクメモリやEMS、プロテクトメモリ(80286/386以降)等のコンベンショナルメモリ以外の領域・手段の利用が一般化していたため、 「貴重な」コンベンショナルメモリがこれらの領域によって圧迫されることはなかった。 日本語入力用のFEPなどの常駐型のデバイスドライバを使用すると一度に使用できるユーザーメモリはさらに減少するため、 ユーザーはEMSやXMS、HMAやUMBなどの拡張メモリの管理機能を利用して、 辞書や常駐部やMS-DOSシステムの一部をそれらへ配置し、コンベンショナルメモリの圧迫を少しでも避けることが重視されるようになった。 「とりあえず動く」という状態を作るだけであればエンドユーザーがこれらを直接操作する必要はほぼ無かったが、 「とりあえず」に飽き足らず無駄を省き最適な設定をするためには知見と試行錯誤が要求されるある種の職人芸的な資質が要求されたため、 これらの事情が「MS-DOSの環境設定は非人間的で困難なものであった」とする後世の評価を招く原因ともなった。 MS-DOS - Wikipedia
- 191 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 19:32:23 ]
- XPでもコンベンショナル・メモリのような設定あるんだがな。
デスクトップアプリケーションヒープ、非対話型サービスヒープの設定可能。 ここ変えないといくらメモリふやしても、メモリ不足改善しないことある。
- 192 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:22:20 ]
- Win3.1の場合、8086向けのコンパイラを若干改造した
もので生成出来るコードでGUIアプリが作れるという のが基本設計 8086ではスタックの動的変更を行う一般的 方法のCPUアーキテクチャーレベルのサポートは 殆ど無いしコンパイラでもサポートしている例は 皆無。
- 193 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:26:14 ]
- おまえは勘違いしている。
スタックというのは、OSから見たら特別な領域でない。 スタックとヒープというのは、C言語(その他)から呼ばれているだけ。 どっちもOSに合わせたメモリ取得関数を呼び出して確保する。同じもの。
- 194 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:30:58 ]
- 昔のOSは区別してあった領域があるかもしれないが
いまのメモリ確保はどれ使っても、OSレベルでは結局は一通りのメモリ確保しかないだろ。 レジスタとかGPUとかは別。
- 195 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:39:53 ]
- >>179
ありがとうございました. うまくいきました.
- 196 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 21:20:04 ]
- 暴れてる長文バカも
同じくらい環境依存なのに startupコードやセクションの話になるとサクッと黙るんだよな
- 197 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 23:15:37 ]
- >>193
WindowsはCPUレジスタそのものを管理しないって? んなことない。ないからこそ他のプロセッサ向けに移植 されていない。初期のWinNT(4.0まで)はプロセッサ が今のように分化してないから対応できたんだろうが さすがに無理になってしまって現在はIntel以外は非対応
- 198 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 23:19:13 ]
- レジスタやGPUメモリは専用命令で扱えるが
スタックとヒープを区別して扱う命令はない。 OSではこれらの差はない。
- 199 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 23:19:18 ]
- おっとMovail (CE)とかは上位レイヤーや言語インターフェース
の互換性があるだけでメモリアーキテクチャーはIntel版とは全然違ってると考えたいね。HD非搭載なマシンでも動作させる必要がある わけだから違って当然だけど
- 200 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 23:25:22 ]
- 入門スレであまり難しい話しないでよ
- 201 名前:デフォルトの名無しさん [2010/03/10(水) 23:33:17 ]
- >>197
alpha とかサポートやめた主な理由は商業的なことで 儲かるとなれば技術的な問題はどうとでもなったはず
- 202 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 01:06:16 ]
- >>198
何を根拠にそういうこと言い切っちゃうの? OSが無い環境もあるし、物理的にアクセス速度が違うメモリに振り分けられることもあるだろう。 結局は環境を絞らないと何も言えない。
- 203 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 02:11:18 ]
- Javaならどうだろうか?
- 204 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 02:36:13 ]
- Intelと一口に言っても、x86/x86-64とIA-64はまったく別物だしね。
- 205 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 02:55:40 ]
- CPUが特殊命令持っていて、スタック動作を速くすることが出来たとしても
それが付いてないCPUでも、スタック、ヒープメモリは使えないといけない。 これより、C言語のスタックとヒープはソフトウェアとしての用語。
- 206 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 02:58:52 ]
- コンパイラの実装次第だがWindowsXP以降では、
スタックもヒープも同一のメモリ確保関数を使っているだろう。 すべてのコンパイラを知っているわけではないが。 CPUレジスタやCPUキャッシュのみをスタックに使う実装も出来ないことはないけど ないんでは。
- 207 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 03:24:29 ]
- 「スタック処理支援命令が付いていないプロセッサなどCPUと
呼んではいけない」 という意見には必ずしも賛成ではないが、付いていることを 前提とするかしないかでは、OSのカーネル開発の開発者の 集団力学には大きな影響が発生し、それがOS全体に 作業環境全体に与える影響力は計り知れず、スタック支援命令が ついたプロセッサ上のOSしか知らない俺にとっては とてもじゃないが反対だとも言えない。
- 208 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 04:07:46 ]
- ハードウェアのスタック機能と、C言語のスタックとヒープは
名前と動作は似ていても別物。 C言語のスタックメモリは複雑だろ。auto変数や関数呼び出しや再帰とか。 ハードウェアの機能に丸任せできないだろ。
- 209 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 04:14:51 ]
- >>181で答え出てるのにまだ続けるのか
- 210 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 04:23:33 ]
- C言語に限らずプログラミングで頻繁に出現する
データ構造の総称的名称としてのスタックやヒープと CPUが決定する「具体的な」ものとでは使われる コンテクストが全く違うだろうな(特に範疇性) 同じ用語を用いていてもコンテクストが全く異なる ので同じコンテクストで使われていると決めつける と何かと混乱の原因になりやすい鴨
- 211 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 04:48:24 ]
- 文字列が数値かどうか判定するのにisdigitを使うと
マイナスや小数が誤判定されてしまいますが これらも正しく数値と判定させるためには自前で関数用意するしかないのでしょうか。
- 212 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 04:52:39 ]
- >>211
isdigitは数字かどうかを判定する(一般には)マクロ なんで、数値かどうかの判定を一発でするのは 無理 受け取った文字列をsscanf等で数値に直したものを 人の目を通して確認してもらうのが一番 0.9994242123123232132という文字列を数値 に直したのを表示させた時に 0.9994242123123456789 となった場合にそれが問題なのかどうかは状況に 依存。
- 213 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 05:41:48 ]
- >>211
atoiやatof等で不満なら自作するしかないね。
- 214 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 06:01:50 ]
- レスどうもです。
sscanfだと"1xyz"みたいに先頭だけ数字の文字列も数値として通ってしまうなぁ・・ と試行錯誤してたらatofで完璧でしたどうもありがとうございます。
- 215 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 06:10:06 ]
- とおもったらatofでもやはり先頭が数字だとだめでした;;
- 216 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 06:32:11 ]
- >>208
べつに、auto変数や再帰や関数の引数で特別なことはやっていないし C 言語のスタックメモリが複雑とも思えませんけれども。
- 217 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 07:00:12 ]
- >>215
じゃぁ、自作だね。 チェック関数だけ書いて後はatofに流すのが無難かなっと思うけど 用途や目的次第なのでお好きにどうぞ。
- 218 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 13:54:53 ]
- >>215
#include<stdio.h> double get_value(const char *str) { double value; int n; if(sscanf(str, "%lf%n", &value, &n)==1) { if(str[n]=='\0') return value; } return -1.0; } #define TEST(str) printf("[%s]=%f\n", str, get_value(str)) int main(void) { TEST("0.12345"); TEST(" 0.12345"); TEST("0.12345 "); TEST("1xyz"); return 0; }
- 219 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 15:01:30 ]
- 素直にstrto{l,ul,d,f,ld}を教えてやれよ
- 220 名前:デフォルトの名無しさん [2010/03/11(木) 18:54:28 ]
- スレチかもしれませんが
detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1137870116 これ、答えて下さいませんか?
- 221 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 18:56:35 ]
- >>220
スライドショー フリーソフト でggrks
- 222 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 19:57:20 ]
- 断片化対策にこういうことってやっていいの?
サイズ違うのにキャストしても大丈夫かな? void *my_allocate(size_t size) { return malloc(size / 4 * 4 + 4); } void my_deallocate(void *address) { free(address); } int main(void) { char *pc = (char *)my_allocate(sizeof char); *pc = 'c'; printf("%c", *pc); my_deallocate(pc); return 0; }
- 223 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 20:05:17 ]
- >>222
多いのは大丈夫 不足するのはダメ
- 224 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 21:59:52 ]
- >>222
4バイト単位で大きさ調整しても意味なさそう。
- 225 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 23:24:21 ]
- その式だと、最初から4の倍数だった時、必要なサイズより4バイト大きくなってしまう
普通はビット演算を使うと思う (size + 0x00000003) & 0xfffffffc
- 226 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 23:46:52 ]
- >225
それはsize_tが何バイトだと想定しているわけ いや、むしろ何ビットといった方が良いのかな
- 227 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 01:10:36 ]
- (size + 3) / 4 * 4
だな
- 228 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 01:54:07 ]
- >>226
それなら、0xfffffffcを~(size_t)3にでもすればいいと思う。
- 229 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 02:32:04 ]
- ~((size_t)3)かな
- 230 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 02:41:42 ]
- 昔は乗除算は必ずシフトに展開しろと教わったもんだが
今のCPUだとコストに差はないのかな (size + 3) >> 2 << 2
- 231 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 02:48:41 ]
- 演算子の強度低減ぐらいなら処理系がうまく最適化してくれるので
意図をそのまま表現するのが良いとされるようになってきたような
- 232 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 02:59:55 ]
- / 4 * 4 も >> 2 << 2 も & 0xfffffffc に最適化してくれるね
- 233 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 03:35:43 ]
- 素直に「4の倍数に切り上げ」ってコメントに書くわ
どんなに簡単な処理でもコメントがあった方が読みやすいし とくに何年も前に書いたソースだと
- 234 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 15:01:25 ]
- >>233
まさかとは思うが、こんなコードは書かんでくれよ。 ++count; // カウントのインクリメント
- 235 名前:デフォルトの名無しさん [2010/03/12(金) 15:08:47 ]
- 教えてください。
システムソフト開発の会社に入ってそろそろ10年。 サポートや試験担当ということもあって、 まったく言語というものを知らずに来ました。 最近、なんかまずいかな? と思い始めて「猫C」を買って勉強しています。 でも、特に目的がないせいか、 この本やったあと次はなにを勉強すればいいかわかりません。 なにかおすすめの書籍があれば教えてください。
- 236 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 15:11:00 ]
- なにがまずいの?
- 237 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 15:11:31 ]
- 会社の言語やってるやつに聞け
実用で使われないやつやっても無用の長物 配置転換でリストラにならないように現場で使われる率高いやつ
- 238 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 15:13:50 ]
- C言語などいくらやっても徒労に終わる
基礎が出来ても完成品が出来るまでの道のりは険しい 自分でした独習など焼け石に水状態 会社でやってるのをピンポイントでやるべき
- 239 名前:デフォルトの名無しさん [2010/03/12(金) 15:17:38 ]
- ありがとうございます。
.NET(C#?)の問い合わせが多いので その言語のサンプルを読めるようになると サポートの幅は広がるよね。 とは言われました。 そうか、と思いつつ、 基本である(と思っている)C 言語の初歩本くらい やっといた方がいいのかな、 と思ってせこせこやっていました。
- 240 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 15:20:59 ]
- あとC#で何分野やってるのかも聞くといい。
GUIとかゲームとかネットワークとか。 その分野を重点してやる。
- 241 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 15:25:07 ]
- C#で開発ってXbox360かと思った。
- 242 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 17:16:54 ]
- >>239
土方を目指すのでなければCは必須
- 243 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 18:00:22 ]
- Cできたところで結局ドカタなんすけどね
- 244 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 18:37:40 ]
- switch(c->programming){
case YES: printf( "Cができるとは素晴らしいですね\n" ); default: c->status = "土方" break; }
- 245 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 19:05:31 ]
-
浮動小数を文字列に変換する方法について教えてください。 求める動作は次のとおりです: * double型を文字列に変換 * printf系などの外部関数で変換しない * 整数は整数として表示(小数点を付けない) * 小数点以下の不必要な0は付けない * 有効な精度(15桁程度?)で適当に丸める * 出力が長い場合も扱える(例えば、「12340000000000000000000」など) いろいろやってみたのですが思い通りのものが作れなかったので・・・ アイデア・ヒントいただければと 自分で作ってみたものも一応晒しておきます。 ↓だと、「456」のときに「459.9999...」となってしまいうまくいきません。 codepad.org/lEqBv5Qz
- 246 名前:245 mailto:sage [2010/03/12(金) 19:07:20 ]
- ↑の「459.9999...」は「455.9999...」の間違いでした。
申し訳ない。
- 247 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 19:44:29 ]
- 配列を関数に渡して、その値を取得したいんですが、上手くいきません
どうすればいいでしょうか?
- 248 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 19:46:36 ]
- >>247
[50] を除けばいいかも
- 249 名前:デフォルトの名無しさん [2010/03/12(金) 19:58:47 ]
- すみません、取得したいというのは
int test[10]; func( &test ); a = test[ n ]; というつもりでした
|

|