C言語なら俺に聞け(入門編)Part 127 [転載禁止]©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2014/11/25(火) 11:21:27.00ID:/YcGydE4★前スレ
C言語なら俺に聞け(入門編)Part 126
http://peace.2ch.net/test/read.cgi/tech/1401026150/
★過去スレ
ttp://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++の宿題片付けます 167代目
http://peace.2ch.net/test/read.cgi/tech/1392388003/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
# サイズが大きい場合はアップローダ等を利用してください。
ttp://codepad.org/
ttp://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
【重要】
当たり前の事ですが、2chではコピペ荒らしは禁止されています。
0002デフォルトの名無しさん
2014/11/25(火) 11:22:07.58ID:/YcGydE4hogeは禁止です。使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
また、hogeはNGワードに追加しておくことが強く推奨されています。
0003デフォルトの名無しさん
2014/11/25(火) 11:32:53.13ID:fATWhlU/0004デフォルトの名無しさん
2014/11/25(火) 17:06:08.54ID:qBXs+9tQ全体的な方針は未だ決まらず、ずっと足踏みしたままです。
革新的な方法はあるんですかね?
0005デフォルトの名無しさん
2014/11/25(火) 17:39:15.15ID:+auTw7Mt配列をi固定でj+なんとかになるようしてみるとか
0006デフォルトの名無しさん
2014/11/25(火) 20:48:40.46ID:qBXs+9tQj固定のi+…をi固定のj+…にしても、配列を縦から操るか横から操るかが変わるだけで、速度は変わらないと思うのですが…
読み取り間違っていたらすみません。
0007デフォルトの名無しさん
2014/11/25(火) 21:54:19.31ID:+auTw7Mtt[][]
**t
と等価なのよ
間違ってるかな、自信なし
0008デフォルトの名無しさん
2014/11/25(火) 22:54:29.67ID:9LFEcwuR大間違い
*t[][n]と等価なのは
(*t)[n]
中途半端な知識で回答しようと思うなよ
混乱を招くだけ
0009デフォルトの名無しさん
2014/11/25(火) 22:58:11.14ID:9LFEcwuR0010【重要】
2014/11/26(水) 00:39:36.20ID:0gGIykAvhogeの使用が禁止されているのはチョーセン人だけです。
他の人は自由に使って構いません。
0011デフォルトの名無しさん
2014/11/26(水) 01:44:43.43ID:iRlPsQJw0012デフォルトの名無しさん
2014/11/26(水) 01:49:59.04ID:jGVOTHDhptr[i]==*(ptr+i)==i[ptr]の話するならまだしも
0013デフォルトの名無しさん
2014/11/27(木) 19:59:10.69ID:pfdljc1Xhttp://i.imgur.com/2f8fP3F.jpg
http://i.imgur.com/u0ymg8c.jpg
http://i.imgur.com/LruEssT.png
http://i.imgur.com/AeSQqRT.jpg
http://cisburger.com/up/bnf/6016.jpg
http://up.pangya.tv/src/www_pangya_tv18594.jpg
0014デフォルトの名無しさん
2014/11/28(金) 04:53:34.32ID:0dpuLFb433行目のところでみると、iとlimit[1]のポインタが同じになってしまっています
半端な知識でかいたプログラムなので見づらいと思いますが、何が原因なのか教えてほしいです
cygwinでコンパイルしてます
0015デフォルトの名無しさん
2014/11/28(金) 05:29:53.25ID:8rikF3woCの配列は0スタート。limitはlimit[0]の1要素しか無いからlimit[1]ではその後ろにある領域を参照する。
あとはメモリ上の配置でlimit[0]の次にiが来ていたらその状況になる。
0016デフォルトの名無しさん
2014/11/28(金) 17:33:11.80ID:PZv7DUA8俺の地元に、foo薬局っていうのが、マジである。
001714
2014/11/28(金) 20:31:58.81ID:0dpuLFb4すみません、よくわからないです
運が悪いとポインタがかぶることがあるから、
対策としては予期せぬ挙動が起きたらポインタを確認してみて、別の変数を用意する必要があるということですか?
0018デフォルトの名無しさん
2014/11/28(金) 20:34:29.97ID:OmZ6QPBS△コードが悪い
○頭が悪い
0019デフォルトの名無しさん
2014/11/28(金) 20:42:01.51ID:xmPZ52Bna[1] はやっちゃいけない
int b[5]; ならば b[0] b[1] … b[4] まで
30行目 int i, j, k, limit[1]; ← ここ limit[2] じゃねーの?
0020デフォルトの名無しさん
2014/11/28(金) 20:55:26.35ID:il6CeYvF0022デフォルトの名無しさん
2014/11/28(金) 22:29:49.76ID:kQ+KNJmDint size;
...
...
int Data[1];
} stData;
とかよくやるけどな。
CGデータとか。
仕事や他人に渡すソースでは絶対にやらないけど。
0023デフォルトの名無しさん
2014/11/28(金) 23:10:26.75ID:pzWeG9kv0024デフォルトの名無しさん
2014/11/28(金) 23:24:18.92ID:hZPBmLkWどっかのライブラリでも見たことあるわ
0025デフォルトの名無しさん
2014/11/29(土) 00:36:18.65ID:pwVAqDB90026デフォルトの名無しさん
2014/11/29(土) 01:42:38.93ID:XzF56UWh分割コンパイルでいろいろ検索していたら、ほとんどの関数に
staticがついていたもので。
0027デフォルトの名無しさん
2014/11/29(土) 01:48:38.62ID:+DvcCbsB0028デフォルトの名無しさん
2014/11/29(土) 01:51:44.59ID:7Wka631z別のファイルからその関数を呼び出せなくなる
0029デフォルトの名無しさん
2014/11/29(土) 08:13:26.44ID:DwXwq/ki0030デフォルトの名無しさん
2014/11/29(土) 08:22:28.03ID:V5TrThEXそれをスタック上で使うのが神
0031デフォルトの名無しさん
2014/11/29(土) 08:33:40.06ID:i2K4iPXrそれBITMAPヘッダ、ソケットがらみのヘッダにもよくあるから定番
オフセットがずらっと並んで扱いにくいヘッダもあるけどmalloc/free先頭一発でできてコスト低い
0032デフォルトの名無しさん
2014/11/29(土) 08:37:01.30ID:i2K4iPXr0033デフォルトの名無しさん
2014/11/29(土) 09:41:39.38ID:V5TrThEX0034デフォルトの名無しさん
2014/11/29(土) 10:18:50.61ID:C2AfWzRB0035デフォルトの名無しさん
2014/11/29(土) 10:30:45.81ID:2LwtSyz2馬鹿
0036デフォルトの名無しさん
2014/11/29(土) 10:50:58.11ID:C2AfWzRB0037デフォルトの名無しさん
2014/11/29(土) 16:01:03.30ID:ZNgLkXk6・関数内 => auto 変数ではない
・関数外 => extern 変数ではない
0038デフォルトの名無しさん
2014/11/29(土) 16:17:00.78ID:FNTRY+e0仮引数のとき、 忘れているぞ
0039デフォルトの名無しさん
2014/11/30(日) 03:40:49.90ID:E9FsLWG8void f(char [static 10]);
こういうのでしょ
0040デフォルトの名無しさん
2014/11/30(日) 10:59:05.20ID:f+jZcoRyしかし、配列の初期化でこんな書き方ができるようになっていたとは…
int a[] = {
[0] = 1,
[1] = 2,
};
0041デフォルトの名無しさん
2014/11/30(日) 11:57:32.38ID:iMnVmoq915年以上も前に発行されたC99の仕様書を読んだこと無い奴が存在する事の方が吃驚だわ。
0042デフォルトの名無しさん
2014/11/30(日) 12:01:10.70ID:8yVmTGOV自分の常識だけで考えないほうが良いよ
0043デフォルトの名無しさん
2014/11/30(日) 13:08:33.61ID:tHR3Cg3Xfor(int i=0;
なんてやってると大抵やり直しだよ
0044デフォルトの名無しさん
2014/11/30(日) 13:54:05.43ID:+4cKqP8Lバグだらけのコンパイラをイヤイヤ使わされてパッチあてたりするなら同情するけど
0045デフォルトの名無しさん
2014/11/30(日) 15:49:55.43ID:e0aRXJPCMISRA-C2004でC90遵守、2012でC99遵守っていうルールがあるから仕様書必須だったわ
そもそも完全に守れてるかどうかなんてわかんねーよ
0046デフォルトの名無しさん
2014/11/30(日) 15:59:28.33ID:tHR3Cg3Xそれって>>40みたいなのを必ず使えってわけではなくて、C90準拠のコンパイラでコンパイルできるようにするって話のような気が
0047デフォルトの名無しさん
2014/11/30(日) 16:33:52.48ID:e0aRXJPC最低でもC90に準拠している複数のコンパイラでコンパイルする予定のコードだから
仕様の範囲を知って自分でその範囲に抑える必要がある
まあチェッカにも頼るけど
0048デフォルトの名無しさん
2014/11/30(日) 19:10:47.37ID:7ch8dIAZ独学なのでやっちゃいけないこととかしてないかがわからないんですが、
ソースはったらレビューしてもらえますか?
0049デフォルトの名無しさん
2014/11/30(日) 19:24:05.28ID:afulJL7A0050デフォルトの名無しさん
2014/11/30(日) 19:29:02.38ID:7ch8dIAZお願いします
http://codepad.org/dWxbJRgl
0051デフォルトの名無しさん
2014/11/30(日) 19:41:34.12ID:gdQg8r381〜4じゃなくてenum使って定数にしたほうが分かりやすくないかな
0052デフォルトの名無しさん
2014/11/30(日) 19:44:12.82ID:afulJL7A文法、記述はおかしくはないと思うが。
アルゴリズム的効率はわからないが。
0053デフォルトの名無しさん
2014/11/30(日) 20:04:17.91ID:7ch8dIAZなるほど、こういうことですかね?
http://codepad.org/RORqnnSX
>>52
ありがとうございます。効率はともかく書き方とかが独学じゃよくわからないんで助かります。
0054デフォルトの名無しさん
2014/11/30(日) 22:24:50.79ID:e0aRXJPC素直なコードで読みやすいと思う
以下気が付いた点
http://codepad.org/5JAJbZn0
12行目:今のままでも問題はないと思うけど、正確には int board[4][4] = {{0}}; だよ
26行目-:getchで取った文字は文字リテラルで書いておいたほうが分かりやすいよ
特殊キーについても#defineでマクロ定義しておくと後から見てもわかりやすいよ
('\0'については0のままにする人もいる 224についてはぱっと何かわからんかった←こういうことになる)
117行目-:範囲チェックは==や!=の1点判定じゃなく <=、<、>=、> の範囲判定で書いたほうが安全
今は正しく動いてるから問題ないけど、今後の修正など何らかの影響で判定外に一気に値が飛ぶとif文の中に入っちゃう
(これはもしかしたら組み込みプログラムの話だけかも?)
33行目:これkhbitとgetchじゃなくてgetcharでいいのでは?キーボード押されるまでwhileループが無駄に回ってることになるよね
コンパイルするときに警告(/Wallとか)を出すようにすると以外にミスが分かったりすると
0055デフォルトの名無しさん
2014/11/30(日) 22:34:03.01ID:u6EiVfB2全然分からなくて…
0056デフォルトの名無しさん
2014/11/30(日) 23:02:41.21ID:E9FsLWG8tmp = board[y][x];
board[y][x] = board[y - 1][x];
board[y - 1][x] = tmp;
ここをポインタを使って関数にすると
void swap(int* a, int* b){
int tmp = *a;
*a = *b;
*b = tmp;
}
swap(&board[y][x], &board[y - 1][x]);
こうやって書けるよ
0057デフォルトの名無しさん
2014/11/30(日) 23:07:23.50ID:QFjaV2Jxそれが分からないうちは使うメリットないよ。
0058デフォルトの名無しさん
2014/11/30(日) 23:19:39.57ID:Vcc2HJv9例えば関数の引数に
int foo[100]を渡したいときに
このまま渡したら4byte*100で400byte必要だけどポインタ型ならint *で4byteですむわけです
0059デフォルトの名無しさん
2014/11/30(日) 23:20:06.63ID:tHR3Cg3Xめちゃくちゃでかい構造体をいちいちコピーしないでアドレス参照にして使ったりすることがあるけど
下手に参照先書き換えたりすると面倒だし個人でのプログラミングで無理して使うものでもないy
0060デフォルトの名無しさん
2014/11/30(日) 23:43:04.58ID:7ch8dIAZおー詳しくありがとうございます
12行目は勘違いしてました
26行目以下文字リテラルで書いてもよかったんですね><
intだし整数しか入ってないから整数じゃないとダメだと思ってました
117行目はforの時は無限ループにって気を付けてましたけどifも同じってことですね
33行目はgetcharだとエンター押さないと反応しないかと思ってググってでてきたkbhit使ってみたんですけど
getcharでもいけるんですか?
コンパイルするときに警告とかあったんですね。コンパイルできたらおkだと思ってましたw
0061デフォルトの名無しさん
2014/11/30(日) 23:50:08.20ID:tHR3Cg3X知らなかったわ
0062デフォルトの名無しさん
2014/11/30(日) 23:58:00.98ID:zlEWpLwwWeb系とか、仕事でライブラリ使うようになると、ポインタの理解は必須。
0063デフォルトの名無しさん
2014/12/01(月) 00:23:54.15ID:xgDZwfwwgetcharに関してはすみません考え違いでした
その通り(エンター押さないと動かない)ですね
0064デフォルトの名無しさん
2014/12/01(月) 19:13:39.72ID:BZNhQbSm0065デフォルトの名無しさん
2014/12/01(月) 20:29:06.23ID:GlL64rib0066デフォルトの名無しさん
2014/12/02(火) 01:12:11.31ID:9M3qnKrA基礎をやるならアセンブラ学ぶべきだとは思うけど、
GASは滅べば良いと思う。Intel形式で良いっての…
0067デフォルトの名無しさん
2014/12/02(火) 02:35:28.57ID:C370zj97GNU ASsembler
0068デフォルトの名無しさん
2014/12/02(火) 02:36:08.40ID:Ho4GTHaC0069デフォルトの名無しさん
2014/12/02(火) 04:01:30.16ID:TFHQO0az0070デフォルトの名無しさん
2014/12/02(火) 07:50:29.07ID:kCkBuQHW資格取得専用(笑)
0071デフォルトの名無しさん
2014/12/02(火) 10:39:34.45ID:3rN5XUau0072デフォルトの名無しさん
2014/12/02(火) 23:16:59.49ID:FEogy3N+#include <math.h>でM_PI使っても定義がダメみたいで上手くいきません
0073デフォルトの名無しさん
2014/12/02(火) 23:56:00.20ID:Ki5Q3RuY俺Cから始めたからそう感じる
0074デフォルトの名無しさん
2014/12/03(水) 00:04:12.40ID:FsZvPr0V#include <stdio.h>
#define _USE_MATH_DEFINES
#include <math.h>
int main(void)
{
printf("%f\n",M_PI);
return 0;
}
http://tessy.org/wiki/index.php?C%2FC%2B%2B%A4%CE%A5%C8%A5%E9%A5%D6%A5%EB%BD%B8
error C2065: 'M_PI' : 定義されていない識別子です。
に書いてあった
0075デフォルトの名無しさん
2014/12/03(水) 00:12:44.04ID:0OQ5Ck44Unix系OSとgcc?
0076デフォルトの名無しさん
2014/12/03(水) 00:23:26.04ID:vA6N0j3dgcc だと M_PIl(long double)なんかもあるね
/* The above constants are not adequate for computation using `long double's.
Therefore we provide as an extension constants with similar names as a
GNU extension. Provide enough digits for the 128-bit IEEE quad. */
#ifdef __USE_GNU
:
# define M_PIl 3.141592653589793238462643383279502884L /* pi */
0077デフォルトの名無しさん
2014/12/03(水) 00:25:30.72ID:rw40JVQBどんなに桁が入力されていても標準の方ではCPUの精度以下しかでない。
0078デフォルトの名無しさん
2014/12/03(水) 03:09:10.83ID:96sMVSIBCASLを笑えないよ。
結局、二人の大学院生が作ったLLVMも、
CASLと同じ仮想アセンブラで、
多くの企業が、このアイデアに飛びついた
コンパイルしていったん仮想アセンブラにすれば、
x86,ARMやコア数に関わらず表現できて、
マシン(CPU)を抽象化できる
結局、マシンコードにする前に、
仮想アセンブラという段階が必要だった
0079デフォルトの名無しさん
2014/12/03(水) 03:14:35.03ID:/c7/jI5U0080デフォルトの名無しさん
2014/12/03(水) 12:31:53.65ID:H4iS8HkY結局ネイティブなコードを吐く流れになったからなあ。
LLVMも一過性の産物として終りそうな予感もする。
0081デフォルトの名無しさん
2014/12/03(水) 14:59:39.96ID:uc/zSG8G0082デフォルトの名無しさん
2014/12/03(水) 15:24:07.39ID:VV6MKLd80083デフォルトの名無しさん
2014/12/03(水) 15:43:24.08ID:/c7/jI5U0084デフォルトの名無しさん
2014/12/04(木) 19:13:52.69ID:l5ENkU5P0085デフォルトの名無しさん
2014/12/05(金) 03:05:58.97ID:eExr921O0086デフォルトの名無しさん
2014/12/05(金) 03:26:15.72ID:GPLuask+ググって色々試してみましたが見つけられませんでした。
初歩的な質問ですがよろしくお願いします。
#include <stdio.h>
typedef struct{
char name[32];
int score;
int rank;
} student;
int main(void)
{
// declaration
student data[100] = {"A",0,1};
rankを全て1に初期化したいのですが、どのように書けばよいでしょうか。
0087デフォルトの名無しさん
2014/12/05(金) 03:40:18.68ID:XeWSE51Jそういう問題と違うの?
0088デフォルトの名無しさん
2014/12/05(金) 04:30:02.90ID:GPLuask+そうなんですが、配列なので一変に初期化できる簡単な記述方法があるはずと勝手に思い込んでました。
ないなら回すしかないですかね。
0089デフォルトの名無しさん
2014/12/05(金) 04:34:22.69ID:I2Pxrmns0090デフォルトの名無しさん
2014/12/05(金) 04:36:27.15ID:I2Pxrmns0091デフォルトの名無しさん
2014/12/05(金) 04:51:49.34ID:GPLuask+ないなら作るということですね。
今少し考えてみたら自分のレベルではかなり煩雑なプログラムになりそうですが。頭に入れておきます。
0092デフォルトの名無しさん
2014/12/05(金) 07:14:39.41ID:qhppKeSp構造体って0で初期化するのは簡単なのに
0以外で初期化するのは同じ方法が使えないんだよなあ。
Cの欠陥のような気がする。
0093デフォルトの名無しさん
2014/12/05(金) 07:37:48.42ID:k/VkvRDh初期化できない言語も普通だったし
0094デフォルトの名無しさん
2014/12/05(金) 07:43:35.88ID:5AslDgkv{
{"A",0,1},
...
}
というソースコードをプログラムで生成してインクルードする
0095デフォルトの名無しさん
2014/12/05(金) 07:52:10.92ID:qhppKeSp漢字が多くて漢文に見えたわ
0096デフォルトの名無しさん
2014/12/05(金) 10:08:37.33ID:TirrCESlライブラリもまだあまり分かっていないので少し調べて>>94さんの方法も試してみます。
0097デフォルトの名無しさん
2014/12/05(金) 12:40:57.26ID:GgJystoPループを回しての初期化の何が悪いのかと?
0098デフォルトの名無しさん
2014/12/05(金) 14:02:36.88ID:Fp1NhL2Mライブラリじゃなくてスクリプトか何かを書く話では
0099デフォルトの名無しさん
2014/12/05(金) 14:22:06.60ID:C9f9MAj60100デフォルトの名無しさん
2014/12/05(金) 19:59:19.95ID:GgJystoPそこにゴミが入り込むと面倒w
0101デフォルトの名無しさん
2014/12/05(金) 20:32:12.92ID:Bj+HikuH0102デフォルトの名無しさん
2014/12/05(金) 20:37:07.23ID:qhppKeSpまず最初に全てのメンバに初期値を与えて
から使いますか?
0103片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/12/05(金) 20:48:06.07ID:vHHMkldd0104デフォルトの名無しさん
2014/12/05(金) 22:44:26.96ID:6IHZ7FtX0105デフォルトの名無しさん
2014/12/05(金) 23:28:46.02ID:qhppKeSpするなどという状況がありますか?気にし過ぎのような気もしますが
どうでしょうか?
0106デフォルトの名無しさん
2014/12/05(金) 23:35:42.22ID:2e2mCewQ静的変数で使うのか自動変数で使うのか?
そういう嵌りかたはしたことはないな‥int で宣言したところに(手を抜いて) char でガンガン書いていく、とかしているのか?
0108デフォルトの名無しさん
2014/12/06(土) 00:57:01.30ID:1t0j5bDz0109デフォルトの名無しさん
2014/12/06(土) 01:33:59.97ID:Iv1q4dyjパディングにアクセスする状況をすぐに思いつかなかったがそういうことか。たしかにそれは無茶だわw
0110デフォルトの名無しさん
2014/12/06(土) 01:39:47.66ID:q7blqefOmemmoveならあるけど
0111デフォルトの名無しさん
2014/12/06(土) 02:04:01.39ID:8wEHUWRF0112デフォルトの名無しさん
2014/12/06(土) 04:46:43.65ID:VdTYGgw3Cで開発する仕事は今時ないとか聞きますし
プログラミング始めたばかりでその辺ほとんど知らないのですが
0113デフォルトの名無しさん
2014/12/06(土) 04:52:34.43ID:Iv1q4dyjC++は普通に使うだろうけどCの殆どを内包してるから無駄にはならんし。
0114デフォルトの名無しさん
2014/12/06(土) 05:12:18.73ID:MJPcf3+hAndroid, iOS, Windows Phone
どれもCのコードが動きます。
つまりそういう事ですしおすし。
0115デフォルトの名無しさん
2014/12/06(土) 05:36:24.26ID:VdTYGgw3>>114
なるほどー
自分プログラミングをC言語からやり始めて一ヶ月ぐらいなんです
もうあと1週間もしたら入門本が終わるんで、次どうしようかと思ってるんですよね
C言語やってて結構面白いんです
これを適当に入門で終わらすのはもったいないなぁと最近思う事も多くて
趣味でやってるだけなんで、面白いと思う方に進めって話なんですけどね
0116デフォルトの名無しさん
2014/12/06(土) 06:43:21.30ID:JJAqNvvU最近だとそういう組込み分野が主体だろうし
0117デフォルトの名無しさん
2014/12/06(土) 06:43:59.06ID:OjtmnI7nパッドがあることによる問題がmemcmpしか出てこないのは程度が低いw
0118デフォルトの名無しさん
2014/12/06(土) 07:19:37.36ID:ui+tbMEFパディングそのものに問題があるならわざわざコンパイラがそんなもの挿入しないと思うが。
0119デフォルトの名無しさん
2014/12/06(土) 07:52:42.28ID:Iv1q4dyj0120デフォルトの名無しさん
2014/12/06(土) 07:54:04.75ID:oqgMZipoクリアしてくれる親切なC系コンパイラあるんだ、最近は
0121デフォルトの名無しさん
2014/12/06(土) 09:35:11.59ID:thE3a94P0122デフォルトの名無しさん
2014/12/06(土) 10:06:01.41ID:oqgMZipo面白くもないのにやってる人っているんだ
0123デフォルトの名無しさん
2014/12/06(土) 10:13:09.35ID:thE3a94Pやっぱ少なくも画面が出るプログラムじゃないと
0124デフォルトの名無しさん
2014/12/06(土) 10:15:10.65ID:oqgMZipo画面表示ができないのは苦痛でしょう
0125デフォルトの名無しさん
2014/12/06(土) 10:27:23.48ID:thE3a94P0126デフォルトの名無しさん
2014/12/06(土) 10:34:34.36ID:oqgMZipoで、あなたはどういうことやってるんですか
0127デフォルトの名無しさん
2014/12/06(土) 10:41:15.24ID:thE3a94Pやっぱ画面が出ないと面白くねえわ
0128デフォルトの名無しさん
2014/12/06(土) 10:44:16.17ID:oqgMZipo0129デフォルトの名無しさん
2014/12/06(土) 11:16:09.02ID:thE3a94P0130デフォルトの名無しさん
2014/12/06(土) 11:27:05.62ID:mBfBm6PL0131デフォルトの名無しさん
2014/12/06(土) 12:12:53.52ID:q7blqefO0132デフォルトの名無しさん
2014/12/06(土) 19:50:46.52ID:UehPKPp6Windowsでもそうか
コマンド作りは面白いよね
0133デフォルトの名無しさん
2014/12/06(土) 19:52:25.49ID:UehPKPp6GUIに移行させるのも楽
0134デフォルトの名無しさん
2014/12/06(土) 20:15:46.45ID:1juExYmo作ってて面白いならそれに越したことはない
0135デフォルトの名無しさん
2014/12/06(土) 21:22:11.43ID:X08O570Zプロクシ、WEBサーバとか
それはそれで面白い
0136デフォルトの名無しさん
2014/12/06(土) 22:44:45.27ID:Iv1q4dyjLチカLチカー!
0137デフォルトの名無しさん
2014/12/06(土) 22:48:16.95ID:FWmjRtxdCならOSやらサーバやらの深い部分をやるのが醍醐味
0138デフォルトの名無しさん
2014/12/06(土) 23:37:20.24ID:ui+tbMEF0139デフォルトの名無しさん
2014/12/07(日) 06:19:08.52ID:7+VBL/CT拡張命令とかまで範囲にいれると部分的にアセンブラの可能性もあるけど。
0140デフォルトの名無しさん
2014/12/07(日) 09:38:23.25ID:bfkTF4nN0141デフォルトの名無しさん
2014/12/07(日) 10:27:37.97ID:tjSdQb8Q0142デフォルトの名無しさん
2014/12/08(月) 18:07:07.09ID:uKAnA/Wxfunction x(int y[]);となってる関数に対して
x(y);
x(y[]);
x(*y);
この3つの呼び出し方に違いはありますか?
0143デフォルトの名無しさん
2014/12/08(月) 18:08:07.91ID:uKAnA/Wx間違いでしょうか?
例えば文字列型の変数
function x(char y[])の場合は、前述の呼び出し方は無理だと思うのですが…
0144デフォルトの名無しさん
2014/12/08(月) 18:18:15.48ID:6pMx0XrP0145デフォルトの名無しさん
2014/12/08(月) 18:27:26.51ID:28cVONtB0146デフォルトの名無しさん
2014/12/08(月) 19:13:10.06ID:scZRRB0A0147デフォルトの名無しさん
2014/12/08(月) 19:36:41.89ID:uKAnA/Wxc[]と送る方法はエラーがでました
何故でしょう?何故宣言のときはint a(int c[])←OK
呼び出し時int a(c[])はダメなのですか?
0148デフォルトの名無しさん
2014/12/08(月) 19:46:20.77ID:uKAnA/Wxa(*c);
a(&c);
これもアウトでした
何故でしょう?レポートに理由を書かないとダメなので助けて下さい
0149デフォルトの名無しさん
2014/12/08(月) 19:51:01.58ID:mN88JAhq呼び出し時には、宣言の型に対応した変数名を書く
/*宣言*/
int a(int c[]);
int d[3];
/*呼び出し*/
a(d);
最初の質問のような呼び出し方の違いを考える前にまずは普通はどう書くかを正しく理解することから
あと想像でいきなり質問せずに実際にコンパイルして動かしてみてから
0150デフォルトの名無しさん
2014/12/08(月) 19:52:04.95ID:uKAnA/Wxint *f;
*f=123;
printf("%d\n",*f);
int型のポインタ変数fを設定
fの中身*fに123を代入
そして*fを表示…
何故エラー
0151デフォルトの名無しさん
2014/12/08(月) 19:53:36.16ID:uKAnA/Wxありがとうございます
決まりでしたんですね
0152デフォルトの名無しさん
2014/12/08(月) 19:58:07.57ID:uKAnA/Wxint *f;
*f=123;だけでエラーです
何故でしょう…
コンパイルエラーじゃなくて実行エラー
0153デフォルトの名無しさん
2014/12/08(月) 19:59:00.04ID:uKAnA/WxRun-Time Check Failure #3
The variable 'f' is being used without being initialized.
どういうことでしょう?
0154デフォルトの名無しさん
2014/12/08(月) 20:00:13.45ID:mN88JAhqコンパイルしたら***というメッセージが出た とか 実行したら***というメッセージが出た とか
なぜ普通の変数ではなくポインタ変数にする必要があるのか
ポインタとは何かの部分をもう一度教科書を読みましょう
0155デフォルトの名無しさん
2014/12/08(月) 20:06:35.50ID:uKAnA/Wx>>153のエラーです
不気味です
0156デフォルトの名無しさん
2014/12/08(月) 20:07:35.92ID:XOsA95NW変数fを初期化なしに使っている
って書いてる
0157デフォルトの名無しさん
2014/12/08(月) 20:08:33.81ID:uKAnA/Wxどうしたらいいでしょう…
nullって書いてるプログラム見たことないんですが
vs仕様なんでしょうか?
0158デフォルトの名無しさん
2014/12/08(月) 20:09:37.97ID:uKAnA/Wx*f=123;
printf("%d\n",*f);
エラーでました…
0159デフォルトの名無しさん
2014/12/08(月) 20:10:26.89ID:mN88JAhq0160デフォルトの名無しさん
2014/12/08(月) 20:11:54.93ID:XOsA95NWint num
int *f=&num
*f=123;
printf("%d\n",*f);
これでレポート出しましょう
0161デフォルトの名無しさん
2014/12/08(月) 20:12:05.25ID:uKAnA/Wx分かりません
忠実に従いました
0162デフォルトの名無しさん
2014/12/08(月) 20:12:38.68ID:uKAnA/Wxint x=20;
int *f;
f=&x;
printf("%d\n",x);
エラーでました
0163デフォルトの名無しさん
2014/12/08(月) 20:15:45.02ID:mN88JAhq・その教科書が間違っている
・忠実に従えていない
おそらく後者です
>>162
なぜそこは160に忠実に従わないの?
その記述だとエラーはないと思うけど今回は何のエラーがでたの?
0164デフォルトの名無しさん
2014/12/08(月) 20:17:10.86ID:uKAnA/Wxエラーでませんでした、別のコードでした
ありがとうございます。
char *mojiretsu="abcdefg";
mojiretsu[0]='s';
printf("%s\n",mojiretsu);
これがエラーでした
0165デフォルトの名無しさん
2014/12/08(月) 20:18:43.79ID:NHTgNP8I0166片山博文MZ ◆T6xkBnTXz7B0
2014/12/08(月) 20:19:22.78ID:BjF8LS0B0167デフォルトの名無しさん
2014/12/08(月) 20:19:38.62ID:mN88JAhq>>154
ポインタとは何か言葉で説明しなさい
0168デフォルトの名無しさん
2014/12/08(月) 20:21:12.15ID:uKAnA/Wxありがとうございます
ポインタで宣言した文字列は書き換え不可能ってことでしょうか?
0169デフォルトの名無しさん
2014/12/08(月) 20:22:26.50ID:zoYbaXodそうだよ
0170デフォルトの名無しさん
2014/12/08(月) 20:24:56.59ID:3czqE9B9どうせ専門学校も大学も企業の納期と比べたらぬるいし
0171デフォルトの名無しさん
2014/12/08(月) 20:25:31.49ID:BjF8LS0B0172デフォルトの名無しさん
2014/12/08(月) 20:49:43.36ID:D71asFH70173デフォルトの名無しさん
2014/12/08(月) 21:52:43.12ID:3czqE9B9直すべきことは上で散々言われてるし
0174デフォルトの名無しさん
2014/12/08(月) 22:40:32.85ID:R649D88+リンク先が存在しないまま使えるわけないだろ、
っていう説明で新人が一発で理解してくれて嬉しかったw
0175デフォルトの名無しさん
2014/12/08(月) 22:57:16.47ID:8AFno6T2本の目次、って例えよりスマートだね。
0176デフォルトの名無しさん
2014/12/08(月) 23:48:42.70ID:gpxOhL3Dポインタの場合、text section に置かれるわけか…
.file "main.c"
.section .rodata
.LC0:
.string "abcdefg"
配列の場合は data segment で処理される、と
movl $1684234849, 20(%esp)
movl $6776421, 24(%esp)
movl $0, %eax
1684234849 = 0x64636261
6776421 = 0x676665
0177デフォルトの名無しさん
2014/12/09(火) 01:10:17.10ID:VO0UllZTリテラルなのだから変更できないのは当たり前。
char型ポインタ変数はリテラルを指しているだけ。
char型変数の配列の場合はconst宣言しない限り変数なのだから変更できて当然。
添字演算子[]を省いた配列名は、先頭要素のアドレスのエイリアスというだけのこと。
0178デフォルトの名無しさん
2014/12/09(火) 01:13:35.50ID:DF/bnstBs[5]='\0';
とやって昔怒られたなあ懐かしい
0179デフォルトの名無しさん
2014/12/09(火) 01:26:09.99ID:XWJh2+Y40180デフォルトの名無しさん
2014/12/09(火) 01:30:20.83ID:bgh7cIsfconst char *mojiretsu="abcdefg";
mojiretsu[0]='s';
error: assignment of read-only location ‘*mojiretsu’
とはいえ、const を付けなくても文字リテラルを変更しようとする
コードはコンパイルエラーにして欲しいな、、、って GCC に
"-Wwrite-strings" ってのがあるな(warningだけど)
0181デフォルトの名無しさん
2014/12/09(火) 03:22:38.60ID:/n2i5ymF配列の const 宣言
文字列の内容の変更を禁止する時に使用する
例)
const char mojiretsu[] = "abcdefg";
mojiretsu[0] = 's'; /* error */
ポインタの const 宣言
文字列そのものの変更を禁止する時に使用する
例)
const char *mojiretsu = "abcdefg";
*mojiretsu = "stuvwxyz"; /* error */
0182デフォルトの名無しさん
2014/12/09(火) 04:36:29.09ID:BAVYOY2gconst char * mojiretsuでは、ポインタではなくポイント先がconstに指定されている。
ポインタのconst宣言と言うなら、char * const mojiretsuのように代入不可能なポインタであるべき。
0183デフォルトの名無しさん
2014/12/09(火) 06:58:57.09ID:oKuNrEib*mojiretsu = "stuvwxyz";
はおかしいだろ
リテラルそのものは先頭のアドレスを指すんだから
mojiretsu = "stuvwxyz";
が正しいんじゃないの
0184デフォルトの名無しさん
2014/12/09(火) 07:04:26.65ID:jdnBb/7Kchar const * str = "abc";
char * const str = "abc";
char const * const str = "abc"
の違いを勉強してこい、あと
const char *str は忘れてしまえ
0185デフォルトの名無しさん
2014/12/09(火) 08:31:13.11ID:sWX406y7そもそもなんで
const char *mojiretsu="abcdefg";
mojiretsu[0]='s';
をできないようにしてんだ
メモリの無駄遣いを減らすためか
そんなことはプログラマ様に決めさせろよ
コンパイラ製作者ごときが何様だよ
0186デフォルトの名無しさん
2014/12/09(火) 08:40:47.84ID:1bWe/VPp言語仕様に文句を言っても仕方ない。
0187デフォルトの名無しさん
2014/12/09(火) 08:43:52.09ID:I/JBOiEV組み込み系だとROMに割り当てられるから、どうやっても書き換え出来ないけどな
0188デフォルトの名無しさん
2014/12/09(火) 08:56:58.83ID:TRbDMUTZなるほど、こう書くと分かり易いもんだね。
const char* やめるわ。
0189デフォルトの名無しさん
2014/12/09(火) 09:57:24.17ID:5QxFFfy0自分でコンパイラ作ったらいいじゃん。
互換性ないけど。
0190デフォルトの名無しさん
2014/12/09(火) 16:38:33.12ID:gS+W/4lyアホかと馬鹿かと
0191デフォルトの名無しさん
2014/12/09(火) 17:31:47.37ID:ojIhUxyYこのabcdefgをxbcdefgに書き換えるにはどうしたらいいですか?
0192デフォルトの名無しさん
2014/12/09(火) 17:34:03.40ID:ojIhUxyY0193デフォルトの名無しさん
2014/12/09(火) 17:35:55.69ID:ojIhUxyY可能でしょうか?
sの1番目の文字を
char c;に代入するには?
0194デフォルトの名無しさん
2014/12/09(火) 17:38:54.34ID:ojIhUxyY間違ってないコードも表示されるんですがどういうことでしょう
GCCです
0195デフォルトの名無しさん
2014/12/09(火) 17:40:55.32ID:nPE1PwLAにしなさい
0196デフォルトの名無しさん
2014/12/09(火) 17:42:50.08ID:ojIhUxyY配列にするしかないってことですかー
だとしたら変更できないリテラルって何のメリットがあるんですか?
char *s="abcd"という書き方が必要な時ってどんな時なんでしょう?
0197デフォルトの名無しさん
2014/12/09(火) 17:48:00.47ID:nPE1PwLA同じ文字列をハードコードしていたら間違えた文字列が紛れ込む可能性がある
0198デフォルトの名無しさん
2014/12/09(火) 17:49:48.79ID:ojIhUxyYなるほどー、それなら理解できます
0199デフォルトの名無しさん
2014/12/09(火) 18:06:13.59ID:i91PBujD英語を読む、指摘箇所が間違ってないならそこ以前のコードを疑う
通常は間違ってないコードはコンパイルエラーにならない
中括弧を閉じ忘れたりすると本当のエラー箇所より後の行でエラー指摘になることもある
具体例があるなら書き込めばだれか答えるかもね
0200デフォルトの名無しさん
2014/12/09(火) 18:08:49.41ID:sW1xI6XG関数へのポインタってのがどうしても理解できません。
関数へのっポインタは引数ありの関数ごと参照するって事でしょうか?
つまりf(3,"abcd",2)を参照なのか
それとも、関数の枠組みを参照なのか
どっちなのでしょうか?
0201デフォルトの名無しさん
2014/12/09(火) 18:11:48.55ID:sW1xI6XGこのページで勉強しています。
関数へのポインタを配列で宣言してますが
proverb0〜10までの枠組みを参照してる印象です。
引数ごと参照することってあるんでしょうか?
0202デフォルトの名無しさん
2014/12/09(火) 18:14:36.66ID:DF/bnstB関数もどっかに実体が存在しててポインタはそれにリンクするだけ
仮にf(3,"abcd",2)を参照なんてやったら関数ではなくその戻り値のポインタにならんか
0203デフォルトの名無しさん
2014/12/09(火) 18:17:33.71ID:sW1xI6XGそうですよね、関数を実行しまった後を参照してる事になりますもんね。
つまり参照してるのは枠組みって事ですか。
何で関数へのポインタみたいな形で関数を呼び出す必要があるんでしょうか?
面倒臭くないですか?直接関数を呼び出せばいいじゃないですか。
すいませんこれもC言語実習のレポートです。
0204デフォルトの名無しさん
2014/12/09(火) 18:19:15.28ID:sW1xI6XG他に難しい要素ってあるんだろうか
0205デフォルトの名無しさん
2014/12/09(火) 18:19:15.69ID:DF/bnstB0206デフォルトの名無しさん
2014/12/09(火) 18:21:33.18ID:2/WMNdES状況に応じて、呼びたい関数を変えたい場合に、ポインターを使わないと融通が聞かない。
0207デフォルトの名無しさん
2014/12/09(火) 18:22:01.63ID:sW1xI6XGqsortが参照してる関数って何なんでしょう…
0208デフォルトの名無しさん
2014/12/09(火) 18:22:43.54ID:2/WMNdESメモリ管理、例外処理。
0209片山博文MZ ◆T6xkBnTXz7B0
2014/12/09(火) 18:23:53.29ID:/gO7PMz60210デフォルトの名無しさん
2014/12/09(火) 18:25:22.32ID:i91PBujDそこから初めてプログラムを作り始めるんだから
道具の使い方を覚えただけじゃ大したことはできない
道具を使って何をするかを考えなきゃいけない
0211デフォルトの名無しさん
2014/12/09(火) 18:29:30.09ID:sW1xI6XGポリモーフィズム(java)の考え方ですね
ということは配列以外の使い道じゃ使う意味ないってことですか?
>>208
メモリ管理っていうのはCにはガーべッジコレクションが無いので
する必要無いと思うし、例外処理はCにはtry chatch releaseが無いので
それも必要あるのかと…
すいません初心者なもので
0212デフォルトの名無しさん
2014/12/09(火) 18:31:37.87ID:j6toZU++0213デフォルトの名無しさん
2014/12/09(火) 18:33:20.68ID:i91PBujD0214片山博文MZ ◆T6xkBnTXz7B0
2014/12/09(火) 18:35:28.52ID:/gO7PMz60215デフォルトの名無しさん
2014/12/09(火) 18:35:34.68ID:oQKp2wP/>>213
はい、大学で今2年の後期なんでjavaとかもやってますよ
>>212
自前で管理ってのがよくわかりません
フリーソフト使うってことですか?
自分はGCCで標準関数使ってCプログラミングしかやったことないんで
自前とか意味が良くわかりません
0216デフォルトの名無しさん
2014/12/09(火) 18:36:31.79ID:bgh7cIsf0217デフォルトの名無しさん
2014/12/09(火) 18:37:07.47ID:j6toZU++malloc freeを知らないって
無知ってレベルじゃないな
0218デフォルトの名無しさん
2014/12/09(火) 18:39:22.62ID:bgh7cIsf0219デフォルトの名無しさん
2014/12/09(火) 18:40:50.45ID:j6toZU++0220デフォルトの名無しさん
2014/12/09(火) 18:42:04.45ID:2/WMNdES>ポリモーフィズム(java)の考え方ですね
ポリモーフィズムは、Cの関数callより後に出てきた、”応用”の一つ。
>ということは配列以外の使い道じゃ使う意味ないってことですか?
???
0221デフォルトの名無しさん
2014/12/09(火) 18:46:57.87ID:oQKp2wP/え???malloc freeってメモリ関係だとは知ってましたが
重要なんですか???
単にopenの後にfreeしたらいいだけで重要なんですか?
0222デフォルトの名無しさん
2014/12/09(火) 18:47:24.24ID:2/WMNdES(機能が無い=不要)じゃないよ。
初期のJavaはCでの、メモリ管理、ポインター、例外処理の面倒臭さを改善したものとも言える。
0223デフォルトの名無しさん
2014/12/09(火) 18:48:02.74ID:oQKp2wP/だから配列によって複数の関数を参照する以外の使い道は
関数ポインタは無いって事なのかなと思って
0224片山博文MZ ◆T6xkBnTXz7B0
2014/12/09(火) 18:51:52.82ID:/gO7PMz60225デフォルトの名無しさん
2014/12/09(火) 18:52:46.15ID:oQKp2wP/プログラム実行時に実装されるってことですか?
ランタイム実装??
0226デフォルトの名無しさん
2014/12/09(火) 18:56:27.20ID:2/WMNdES配列以外にも、関数へ渡す引数の中身を、関数ポインタとする使い方もある。
Web系みたいな、非同期プログラミングでは重要。
”理解”というのが言語仕様の範囲を指してるなら、この程度分かればいい。
アプリ組みたいからというなら、オブジェクト指向とか、継続とか、関数型を率直に実装してる言語を使えばいい。
それらの言語自体は初期バージョンでは大抵、Cで実装してあったから、「いちからCで実装」も可能だけど、車輪の再発明はおすすめしない。
0227片山博文MZ ◆T6xkBnTXz7B0
2014/12/09(火) 18:56:55.28ID:/gO7PMz60228デフォルトの名無しさん
2014/12/09(火) 18:58:15.95ID:oQKp2wP/関数へ渡す引数の中身を、関数ポインタとする使い方もある。
>>
シグナチャを関数ポインタ????
簡単なコードで示してくれますか?
全く意味不明なんで教えてください
0229デフォルトの名無しさん
2014/12/09(火) 18:59:40.55ID:nPE1PwLA0230デフォルトの名無しさん
2014/12/09(火) 19:06:26.28ID:77CtVwxR0231デフォルトの名無しさん
2014/12/09(火) 19:10:22.23ID:/t8QN1Fbqsort を実装する側のコードの書き具合
0232デフォルトの名無しさん
2014/12/09(火) 19:21:27.57ID:d3z79ecBそれ以外にも、std::vector<int> vとして、v.resize( 100 )などとすることで、
0に初期化された要素が100個生成されます。
この、vectorのresizeで0初期化されるのはどういう仕組みなんでしょう??
グローバル変数やstatic変数が0に初期化されるのとは違いますよね?
0233デフォルトの名無しさん
2014/12/09(火) 19:25:15.70ID:oQKp2wP/全くわけわからなくなってきたぞww
0234片山博文MZ ◆T6xkBnTXz7B0
2014/12/09(火) 19:26:40.65ID:/gO7PMz60235デフォルトの名無しさん
2014/12/09(火) 19:28:24.42ID:oQKp2wP/なんだこれwww
全然わからねーwww
比較する方法ってなんだwww
比較する方法は > < = じゃないのか?
0237デフォルトの名無しさん
2014/12/09(火) 19:37:55.37ID:i91PBujDどうみてもCの初心者どころかプログラミング自体の初心者だよなあ
今まで何かプログラム作ったことがあるのかなあ
標準入出力でじゃんけんゲームくらいかなあ
>>235
文字列をqsortする例でも一緒に見てみたら
https://www.google.co.jp/search?q=qsort%20%E6%96%87%E5%AD%97%E5%88%97
0238デフォルトの名無しさん
2014/12/09(火) 19:38:53.49ID:Ru2Ys156なんだこの表現は…
どういうことなんだポインタのアドレス値ってこと?
0239デフォルトの名無しさん
2014/12/09(火) 19:40:23.08ID:UeIpgEM5なのかあらかじめ知ることは出来ない。
そこで対象に応じて比較関数を定義して、その関数へのポインタをqsort関数に引数として渡すことで
コンパイル時ポリモーフィズムを実現しているのがqsort関数の実装。
0240デフォルトの名無しさん
2014/12/09(火) 19:40:49.87ID:/t8QN1Fb引き算の結果を大小に代用しちゃいかんケースがあるというのに
※ a > b でも a-b が負になることあるんだぜー
0241232
2014/12/09(火) 19:44:10.12ID:d3z79ecBなるほど、memsetであれば、テンプレート引数型に依らず0埋めできますね。
ありがとうございました。
0242デフォルトの名無しさん
2014/12/09(火) 19:46:38.12ID:Ru2Ys156わけわからん、とりあえずコピペでいいか…
なんだ*(int *)って…
0243デフォルトの名無しさん
2014/12/09(火) 19:47:16.53ID:i91PBujD詳しく知りたい
※のケースが想像つかない
0244デフォルトの名無しさん
2014/12/09(火) 19:48:01.54ID:Ru2Ys156あわかった
これはポインタのポインタだね…
0245デフォルトの名無しさん
2014/12/09(火) 19:50:01.17ID:i91PBujD(int *)にキャストしてからの間接演算子(*)でポインタの指す先を参照
0246デフォルトの名無しさん
2014/12/09(火) 19:50:24.62ID:nPE1PwLAポインタの中身見てるだけだ
0247デフォルトの名無しさん
2014/12/09(火) 19:51:39.86ID:/t8QN1Fba と b のギャップが INT_MAX を超えるとき、オーバーフローして符号が裏返るねん
a = INT_MAX/2 + 1; // 符号付整数の範囲
b = -(INT_MAX/2); // 同じく符号付整数の範囲
だけど a - b は 符号付整数の範囲よりデカイギャップなので あああーーー って
0248デフォルトの名無しさん
2014/12/09(火) 19:54:42.01ID:i91PBujDなるほど
比較関数は引き算で定義してるのよく見るけど
オーバーフローに気を付けないといかんのね
解説ありがとう
0249デフォルトの名無しさん
2014/12/09(火) 19:56:22.69ID:g1fAS7xTvoid* p = &a;
int b = *(int *)p; // b = 1
0250デフォルトの名無しさん
2014/12/09(火) 20:00:28.63ID:Ru2Ys156??????????????????????
なんでこっちでは
*a だけでOKなの?シングルポインタなんだろ??
0251デフォルトの名無しさん
2014/12/09(火) 20:01:28.19ID:nPE1PwLA0252デフォルトの名無しさん
2014/12/09(火) 20:08:53.34ID:Ru2Ys156voidじゃなくて具体的な型名ならシングルポインタでOKってことかー
規則多いな〜
後比較関数の規則自体を変える事って可能ですか?
0253デフォルトの名無しさん
2014/12/09(火) 20:12:36.83ID:Ru2Ys1560254片山博文MZ ◆T6xkBnTXz7B0
2014/12/09(火) 20:15:05.60ID:/gO7PMz6並べ替える方法は主に昇順と降順の二種類ある。
0255デフォルトの名無しさん
2014/12/09(火) 20:19:48.10ID:nPE1PwLA0256片山博文MZ ◆T6xkBnTXz7B0
2014/12/09(火) 20:22:33.74ID:/gO7PMz6たとえば、整数を英語にしたときの文字列の長さで並び替えすることも可能。
0257デフォルトの名無しさん
2014/12/09(火) 20:23:27.22ID:/t8QN1FbWindows 7 だかのエクスプローラのファイル名のソートルールが謎い
連続した数字を数値として取り扱ってるのか?真似しようと比較関数考えてたけど
諦めた
0258デフォルトの名無しさん
2014/12/09(火) 20:24:05.85ID:Ru2Ys156比較関数の規則を逆にできないんですか?
だから
第一引数〇第二引数→降順
第一引数△第二引数→昇順
になってるじゃないですか?
これを
第一引数△第二引数→降順
第一引数〇第二引数→昇順
にできないんですか?
0259片山博文MZ ◆T6xkBnTXz7B0
2014/12/09(火) 20:28:23.67ID:/gO7PMz60260デフォルトの名無しさん
2014/12/09(火) 20:30:44.71ID:Ru2Ys1560261デフォルトの名無しさん
2014/12/09(火) 20:36:38.24ID:Ru2Ys156これは
http://www.bohyoh.com/CandCPP/FAQ/FAQ00047.html
比較関数が const int *となってますが
この場合、char型の並べ替えはできないってことですか???
0262片山博文MZ ◆T6xkBnTXz7B0
2014/12/09(火) 20:44:15.55ID:/gO7PMz6C言語の欠点であり、長所でもある。
0263デフォルトの名無しさん
2014/12/09(火) 20:48:47.79ID:nPE1PwLA0264デフォルトの名無しさん
2014/12/09(火) 20:50:34.82ID:Ru2Ys156だってconst *intってなってますよ?
キャストエラー起きてできなくないですか?
0265デフォルトの名無しさん
2014/12/09(火) 20:52:02.55ID:77CtVwxR0266片山博文MZ ◆T6xkBnTXz7B0
2014/12/09(火) 20:52:16.04ID:/gO7PMz60267デフォルトの名無しさん
2014/12/09(火) 20:52:33.83ID:nPE1PwLA0268デフォルトの名無しさん
2014/12/09(火) 20:52:58.58ID:Ru2Ys156実行時ポリモーフィズムはできないってことですか
0269デフォルトの名無しさん
2014/12/09(火) 20:57:01.93ID:/t8QN1Fbできないことはないだろう
だが、Cでクラスもどきを書きたくはないな…
0270デフォルトの名無しさん
2014/12/09(火) 20:58:32.82ID:cVTgs8S9やってはいけない書き方
0271デフォルトの名無しさん
2014/12/09(火) 21:08:08.73ID:Ru2Ys156char*とconst char*は違う????
前の書き込みでchar*だとリテラルだから書き換え不可能って書き込み
ありましたけど、書き換え不可能なのはconstつけたときだけ????
char*だと書き換えできるのですか?
0272デフォルトの名無しさん
2014/12/09(火) 21:10:22.53ID:nPE1PwLA0273デフォルトの名無しさん
2014/12/09(火) 21:12:12.29ID:/t8QN1Fb文法上は一見許可されているように見えて、実は指し先が書き換えを許さない場合
0274デフォルトの名無しさん
2014/12/09(火) 21:26:12.03ID:DF/bnstBhttp://codepad.org/dnEJyn4k
>>257
strtolでもつかってみ
aとàが同一視されるから注意
0275デフォルトの名無しさん
2014/12/09(火) 21:30:16.06ID:g1fAS7xTあああ235いいい
Windowsのエクスプローラはこういうのもソートするから標準関数とは別物
0276デフォルトの名無しさん
2014/12/09(火) 21:31:02.63ID:DF/bnstB最後の行はエクスプローラーのソートの話ね
0277デフォルトの名無しさん
2014/12/09(火) 21:37:57.37ID:g1fAS7xThttp://peace.2ch.net/test/read.cgi/tech/1408743258/840
840 :デフォルトの名無しさん [sage]:2014/12/05(金) 12:12:49.54 ID:V1LIMZ+K
>>839
StrCmpLogicalW
質問の意味がわからないが、とりあえず qsort() の使い方を習得することがはやい
qsort() をつかいこなせるように努力しろ
0280デフォルトの名無しさん
2014/12/09(火) 22:00:52.22ID:Ru2Ys156面白いww
const完全に理解できたww
これで俺も中級者かな?
0281デフォルトの名無しさん
2014/12/09(火) 22:03:47.36ID:Ru2Ys156皆さんありがとう!
0282デフォルトの名無しさん
2014/12/10(水) 00:58:59.85ID:l/HegTzacount=0;
while(ptr[x++])
{
count++;
}
として例えば文字列が"ABC"なら3ですが
ptr[3]が-1231241とかじゃなくて
処理系によっては1000000とかの場合
whileを抜けない、またptr[3]にはアクセスできないからエラーになる
可能性もあるし、このようなコードはよくないですか?
0283デフォルトの名無しさん
2014/12/10(水) 01:18:18.64ID:l/HegTzaptr[count++]で
{}内は;だけです。
while(ptr[count++]) ;
こうです。
0284デフォルトの名無しさん
2014/12/10(水) 01:29:49.66ID:Ji/TW/nS文字列終端を’¥0’以外で規定している処理系というのは知らないな。
学習とか、個人用ツールなどの安全な環境で使うときは>>283でオーケー。
ただし、わざとヌル終端していない文字列を送り込むという古典的な攻撃手法があるから、
商用アプリ組むようになる前には、内容チェック(クレンジング)方法を学んだほうがいい。
0285デフォルトの名無しさん
2014/12/10(水) 01:49:54.17ID:l/HegTzaありがとうございます!
どの処理系も同じなんですね
0286デフォルトの名無しさん
2014/12/10(水) 02:32:07.90ID:hVfFOG57そのコードだと、文字列(char ptr[])が"ABC"なら4が返るんじゃない?
条件式じゃなくてループ内でインクリメントしないと
count=0;
while(ptr[count]) count++;
0287デフォルトの名無しさん
2014/12/10(水) 16:29:40.61ID:Y1ZzY1qvどういうことでしょうか?
0288デフォルトの名無しさん
2014/12/10(水) 16:38:58.90ID:PES5DTVy有効精度が違う
CPUによって、計算の得意な側がある(こともある)
ちょっとしたことで (暗黙に)double 化してしまう
0289デフォルトの名無しさん
2014/12/10(水) 16:43:57.43ID:Y1ZzY1qvfloatは使わないほうがいいですか?
0290デフォルトの名無しさん
2014/12/10(水) 16:47:57.17ID:PES5DTVyDirectX とかの描画に纏わるもので
浮動小数点を要求してくるようなののインターフェースは float だったりするし
SIMD系のインラインでがりがりっやるぜ も float だし
用途に拠る としか
0291デフォルトの名無しさん
2014/12/10(水) 16:49:59.42ID:Y1ZzY1qvありがとうございます
自分で作る分にはdoubleでいいってことですね
0292デフォルトの名無しさん
2014/12/10(水) 17:04:51.56ID:L7mQQYSS0293デフォルトの名無しさん
2014/12/10(水) 19:51:34.81ID:9n4pVCzB0294デフォルトの名無しさん
2014/12/10(水) 19:54:00.68ID:Y1ZzY1qvへぇそうなんですか
でも小数点100以下くらいの精度が必要な計算は自然と
double使う必要って出てくるんじゃないでしょうか?
0295デフォルトの名無しさん
2014/12/10(水) 20:20:44.58ID:SCFm5xip0296デフォルトの名無しさん
2014/12/10(水) 20:47:55.28ID:Y1ZzY1qv1434534.24234とかだと
1から始まると思いますが、
0.0002342123の場合
2から始まるんでしょうか?
3つの0は精度に入らないんでしょうか?
0297デフォルトの名無しさん
2014/12/10(水) 20:51:09.89ID:3rJhHXQ+がんばって読め。
0298デフォルトの名無しさん
2014/12/10(水) 21:01:25.55ID:Lctd7lUm精度を求めるなら浮動小数点数は使えないな
0299デフォルトの名無しさん
2014/12/10(水) 21:16:23.77ID:Fb6UgWfoプログラミングでの浮動小数点以前の問題だろ
0300デフォルトの名無しさん
2014/12/10(水) 21:51:33.73ID:tjevTOGiC言語の勉強して疑問に思ったんだけど
C言語のコンパイラだとBorland C++ やMinGWって名前のがあるけど
Visual C++ Express EditionはWiki読むと
コンパイラ本体である cl (cl.exe)って言うのがコンパイラの名前になるの?
それとも製品名(でいいのかな?)のVisual C++がコンパイラ名になるの?
0301デフォルトの名無しさん
2014/12/10(水) 21:54:33.89ID:hVfFOG57悲しくはないけれどこれ、現実なのよね…
0302デフォルトの名無しさん
2014/12/10(水) 22:58:18.78ID:Lctd7lUm0303デフォルトの名無しさん
2014/12/11(木) 00:26:01.71ID:EQQRMJIYコンパイラという意味では、clでいいかと。
Visual C++というのは、その中からコンパイラやソースエディタやらが使えて
それらを自動的に連携してくれる、統合開発環境。
0304デフォルトの名無しさん
2014/12/11(木) 03:06:14.30ID:fOkuaX7a浮動小数点の精度は、よく知らないが、
Floatで7桁、Doubleで15桁ほど?
それを指数部分の数で、ずらしているだけ
例えば、1.23456789 を、
100桁右にずらしたり、左にずらしたりするだけで、
精度自体は15桁のまま
だから、1.23456789を100桁左にずらすと、
123567890000000...(100桁) とすごく大きい数になるけど、
その数に1を足せなくなる
最小の刻み単位が、10^85 に大きくなっており、
それより小さい数は無視される(情報落ち)
逆に、1.23456789を100桁右にずらすと、
0.0000000...12356789(100桁) とすごく小さい数になるけど、
そのときの最小の刻み単位は、10^-100 とすごく小さくなる
つまり指数部の数で、刻みの単位を変えているだけで、
精度自体は15桁のまま
0305デフォルトの名無しさん
2014/12/11(木) 05:10:11.05ID:SXmyeFPJ0306デフォルトの名無しさん
2014/12/11(木) 08:08:01.49ID:7lmTBtjNてか、アセンブラの勉強しろ
0308デフォルトの名無しさん
2014/12/11(木) 11:12:15.04ID:u3d/vbqo/ / / | \ ヽ
/ / / / / || | i ヽ i
i / / / / / / || || |│ |ノス
|// / /___, -一ァ| /! |ト、|│ | | く」
|,-‐¬  ̄---┘'7 |! ハ! |,、-┼十|! | | |
, -‐ ''" し' '´_ /,ィ二l |ト、/!ヽト、\_ヽ!|!l | ハ |
,r/ __ ,イ|リ ヾハ! ヽ! ,ィ⌒ヾミリノ!/リ | ☆ 自民党、グッジョブですわ。 ☆
/ ||ヽ -' / ̄ )` __ |ヒノ:} '` ,イ/ | | http://www.soumu.go.jp/senkyo/kokumin_touhyou/index.html
,r ' ヾ、 ,-、____ , イ ̄,r==- ==-' レ' /| |
/ ヽ `ーソ ' | |ト、,ヘ ′"" "" / / || | ☆ 日本国民の皆様、12月14日(日)の
. / \_ / | ハ ヽ`゙'ヘ ' '__. ィ / / | | | 『衆議院議員総選挙』に必ず投票にいきましょう。 ☆
/ / / | ヽ 川\ ヾ三ニ‐'′//! | | | |
/ / / 八 \川| |`ト- .. __ , イ‐ァヘ | | || |!
/ / / / \ \ 「`ー- 、 / .〉 ト、| ヽ、
,イ /-─=¬ニヘ、_ \ 厂\ 厂ヽ /!| | `ー=ヘ
-‐  ̄ /─ '  ̄ ├- ヽ\ \ノ\ \ 人 ハ!ヽ || |-┤ ヽ
/ /!‐-- | |\ ト、_`ヽ oヽ ト、! || |‐┤- ヽ
// 〉 __ / ├‐- || | 川-‐ | | 厂7! ハ! ├:┤  ̄ヽ
/ / ー ─  ̄ ├‐- リ || ハ!ヘ | | ト┤|/′ ヾ,┤ ゙i_
‐ ' 〉‐- | / /\ .|o | /ヽ/(′ ∨ \
‐--─ ──-r、___-、 /ー_ {( '´>、! /ヽ/ |\ \
0309デフォルトの名無しさん
2014/12/11(木) 12:10:25.86ID:MNI0BZQ+おかしい
製品 -> コンパイラコマンド
Borland C++ -> bcc
MinGW -> gcc
VisualC++(VC) -> cl
念のため、 gcc は MinGW 専用ではない
0310デフォルトの名無しさん
2014/12/12(金) 14:22:45.22ID:UyV/8EINプログラミング初めて数か月の初心者なのですが、
C言語でソースを作りコマンドプロンプトでアプリケーションを実行したとき
普通は一瞬で表示されますが、たまに表示されるまで5秒ほどかかることがあります。
ループ処理などに問題があり起こるものなのでしょうか?
0311デフォルトの名無しさん
2014/12/12(金) 14:41:11.40ID:V0+m6fxS0312デフォルトの名無しさん
2014/12/12(金) 15:05:53.52ID:Htsdk0RSていうかビルド工程を知らないというオチでは…
0313デフォルトの名無しさん
2014/12/12(金) 15:44:48.88ID:N7ntgF1I使用しているOSや環境、コンパイラとかIDEは何を使ってる?
0314デフォルトの名無しさん
2014/12/12(金) 18:18:24.83ID:42hxWz7+ポインタのポインタの使い方すら分からないのですが、これを使うと
メモリが単なるポインタよりより節約できるという事でしょうか?
勝手な想像で滅茶苦茶な質問かもしれませんが、それくらい使い道が分かりません
0315デフォルトの名無しさん
2014/12/12(金) 18:21:34.02ID:42hxWz7+実体のある型のアドレスさえ操作できたら
操作する側であるポインタのアドレスは必要になるのでしょうか?
0316デフォルトの名無しさん
2014/12/12(金) 18:26:08.21ID:HWhT8wliこれさえおさえておけば何の問題もない
0317デフォルトの名無しさん
2014/12/12(金) 18:30:26.33ID:42hxWz7+確かにそういう認識ではいます。
ポインタのポインタの仕様に適した場面ってありますか?
あれば簡単なコードで示してくださると嬉しいです。
0318デフォルトの名無しさん
2014/12/12(金) 19:02:55.31ID:42hxWz7+0319デフォルトの名無しさん
2014/12/12(金) 19:04:53.69ID:42hxWz7+0320デフォルトの名無しさん
2014/12/12(金) 19:29:31.59ID:4w5Gy0hL0321デフォルトの名無しさん
2014/12/12(金) 21:59:17.46ID:Znidw3Lc使うとすれば関数の引数とかだけど、
最近は構造体にポインタをぶち込んで構造体のアドレス渡しにしたりと、
出来るだけ簡単になるような作り方をしてるんで。
0322デフォルトの名無しさん
2014/12/12(金) 23:05:48.30ID:BMYZZ2qAつ[qsort()]
つ[bsearch()]
0323デフォルトの名無しさん
2014/12/13(土) 00:30:44.79ID:AIdFAM/bあとは、sqlite3_exec の errmsg みたいにポインタが指すデータを返したい場合とか。
0324デフォルトの名無しさん
2014/12/13(土) 00:49:04.63ID:7g8Honqyあとは、ポインタの付け替えを頻繁にやる場合にそのポインタを変えたくない場合とかかのう。
0325デフォルトの名無しさん
2014/12/13(土) 01:09:52.90ID:e5o11uWa0326デフォルトの名無しさん
2014/12/13(土) 04:31:42.26ID:c6jA9oWU0327デフォルトの名無しさん
2014/12/13(土) 08:25:41.57ID:6M/8ZIptポインタfが初期化されてないので不定。
0328デフォルトの名無しさん
2014/12/13(土) 09:19:32.74ID:6M/8ZIptcons char* は、ポインタの示した先が char型定数。
ポインタ自体は定数ではない。
0329デフォルトの名無しさん
2014/12/13(土) 09:27:01.24ID:xMDeynnI0330名無しさん@そうだ選挙に行こう
2014/12/14(日) 14:00:33.77ID:cNg2zbjJなんでですかね?
#include <stdio.h>
//3つの値が等しいかを求める
int main(void)
{
int a,b,c;
puts("3つの整数を入力");
printf("整数A:"); scanf("%d",a);
printf("整数B:"); scanf("%d",b);
printf("整数C:"); scanf("%d",c);
if(a==b==c)
puts("3つの値は等しい");
else if(a==b || b==c || a==c)
puts("2つの値が等しい");
else
puts("等しい値はない");
return(0);
}
0331名無しさん@そうだ選挙に行こう
2014/12/14(日) 14:01:43.92ID:GK8MVhpVを
scanf("%d",&a);
こうしてみ
0332名無しさん@そうだ選挙に行こう
2014/12/14(日) 14:04:24.08ID:yOihHWvhあと、俺の知ってる限り
if(a==b==c)
っていう書き方は狙い通りに動かないはず
分けてかきなはれ
0334名無しさん@そうだ選挙に行こう
2014/12/14(日) 14:08:15.53ID:B3iNVN480335名無しさん@そうだ選挙に行こう
2014/12/14(日) 14:24:02.50ID:hTLBJWNQこうしたら
if((a & b) == c)
puts("3つの値は等しい");
0336名無しさん@そうだ選挙に行こう
2014/12/14(日) 14:33:02.56ID:cNg2zbjJこうしてみたんですけどどうですかね
自分で確認してみた限りでは問題なさそうなんですけど
あとなんで最初のifの使い方だとちゃんと動かないんですか?
if(a==b){
if(b==c)
puts("3つの値は等しい");
else
puts("2つの値が等しい");
}
else if(a==c){
if(c==b)
puts("3つの値が等しい");
else
puts("2つの値が等しい");
}
else if(b==c){
if(c==a)
puts("3つの値が等しい");
else
puts("2つの値が等しい");
}
else
puts("等しい値はない");
>>335
そっちのがぜんぜん簡潔ですね...
0337名無しさん@そうだ選挙に行こう
2014/12/14(日) 14:39:00.48ID:kAi2SRVOあ、ゴメン。
分けて書くってのは
if(a==b==c) これをif (a == b && b == c && c == a) っていうつもりだった
>>336みたいな書き方は意外と読みにくかったりしないかな?
> あとなんで最初のifの使い方だとちゃんと動かないんですか?
うろ覚えだからあとで自分で確かめてね
まずa==b==は(a==b)==cって解釈されて
a==bは比較演算の結果、1か0の値になったはず
だから0==cか1==cってことになる
これは期待した動きじゃないよね?
0338330
2014/12/14(日) 14:48:06.85ID:cNg2zbjJなんでこんなややこしいのしか思いつかなかったんだろうw
まだ&の使い方をよく理解してなかったみたいです
なるほどなるほど
だからa1 b1 c1の時はうまく行ってそれ以降の数字は0と1じゃないからうまくいかないのか
初歩の初歩みたいなこと教えさせてすいません、ありがとうございましたm(_ _)m
0339名無しさん@そうだ選挙に行こう
2014/12/14(日) 14:54:43.15ID:R9x1i4cIやっべ!
知ったかぶって今顔から火が出そうなんだけど
if (a == b && b == c && c == a)
これって意味考えたら実際は
if (a == b && b == c)
これで十分だよね
あばっばばばばばば…
0341デフォルトの名無しさん
2014/12/14(日) 20:45:22.96ID:igCzp+zoえ?
頼むからへんな小手先の工夫(しかも多くはバグ入り)をしようとせずに素直なコードにしてくれ
http://ideone.com/LYB0at
0342デフォルトの名無しさん
2014/12/14(日) 21:00:30.90ID:sJIG1Voj...
count = ((a==b) ? 1:0)+ ((b==c) ? 1:0)+ ((a==c) ? 1:0);
switch(count){
case 1:
puts("2つの値が等しい");
break;
case 3:
puts("3つの値が等しい");
break;
default:
puts("等しい値はない");
}
0343デフォルトの名無しさん
2014/12/14(日) 21:12:55.67ID:2Jvuuix5それバグってますやん
0344デフォルトの名無しさん
2014/12/14(日) 21:24:46.95ID:hTLBJWNQ∧,,,∧
(・ω・` ) スマンカッタ・・・
/ y/ ヽ
━(m)二フ⊂[_ノ
(ノノノ l l l )
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0345デフォルトの名無しさん
2014/12/14(日) 23:07:21.46ID:L2ukMfIzint main()
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int count = (a == b) + (b == c) + (c == a);
char msg[][30] = {"等しい値はない", "2つの値が等しい", "", "3つの値が等しい"};
puts(msg[count]);
return 0;
}
0346デフォルトの名無しさん
2014/12/15(月) 00:28:13.27ID:jHNOj1Lw0347デフォルトの名無しさん
2014/12/15(月) 01:40:57.49ID:IJcvwGIKchar *msg[] = {"等しい値はない", "2つの値が等しい", "", "3つの値が等しい"};
でいいと思う
0348デフォルトの名無しさん
2014/12/15(月) 06:18:59.45ID:BFl1DIKk0349デフォルトの名無しさん
2014/12/15(月) 14:38:27.14ID:3amZ0p/tと思って調べたらC99では1を返すことが書いてあった(6.5.9 等価演算子)
0350デフォルトの名無しさん
2014/12/15(月) 14:55:11.73ID:np/IX2C30351デフォルトの名無しさん
2014/12/15(月) 17:40:12.00ID:Wa+r9Mlqへー
経験的に1を返すのは多くの奴が知ってるだろうけど
結局、規格としてはどうなのかは俺は謎のままだった
0352デフォルトの名無しさん
2014/12/15(月) 18:37:23.53ID:tkcj1qgAnのn乗の全てのパターンを出すやり方を教えてください
3の場合こういうやつです 階乗はわかるんですが、こっちはわからなくて質問しました
111
112
113
121
122
123
〜〜
〜〜
333
0353デフォルトの名無しさん
2014/12/15(月) 19:12:33.49ID:3amZ0p/thttp://ideone.com/CzsQV8
0354デフォルトの名無しさん
2014/12/15(月) 19:28:03.45ID:/SsCOr8K「真が1」に頼らないコードを書くべき、<ctype.h> の is*() 系は真のときとんでもない値を返してくる‥
ただし自分で真偽値を返すときは、真のとき1, 偽のとき 0 を返すように書けばいい‥
0355デフォルトの名無しさん
2014/12/15(月) 19:39:38.61ID:tkcj1qgAそんな感じです
ありがとうございます
コードもキレイで理解できました
0356デフォルトの名無しさん
2014/12/15(月) 19:48:30.98ID:tkcj1qgAほんとここで聞いてよかったです
0357デフォルトの名無しさん
2014/12/16(火) 06:03:04.12ID:OS5+Z4sE0358デフォルトの名無しさん
2014/12/16(火) 07:01:42.51ID:JddV/lkN0359デフォルトの名無しさん
2014/12/16(火) 08:15:32.72ID:CudKiy/r0360デフォルトの名無しさん
2014/12/16(火) 15:41:44.61ID:6dwtmE+Egetchで特殊キーが入力された時、最初に返ってくる値が0だったので
if(返ってきた値==0)なら特殊キーと判断させてたのですが
プログラムを動作させる環境によっては返ってくる値が0じゃない場合もあって
上手くいかない時があります、
最初に返ってくる値関係なく通常キーか特殊キーかで処理を変える方法あるでしょうか?
0361デフォルトの名無しさん
2014/12/16(火) 16:47:51.15ID:DmUZUC9dキーが「押された」と「入力された」は別。
0362デフォルトの名無しさん
2014/12/16(火) 17:10:15.95ID:vHDhcsvCそれとも文字数字以外のキー(カーソルとかエンターとか)全般のこと?
前者ってそもそもgetchでとれるんだっけ?
後者だとしたら、通常キーと考えているものを列挙とか範囲指定とかしておいて、それ以外は特殊キーっていう作りにすれば
0363デフォルトの名無しさん
2014/12/16(火) 17:28:03.63ID:UekbD/oFキーボード入力から となると
windows 系だと kbhit linux系だと get_tty ?
どちらも非標準の関数だけど、そういう類の環境依存な奴を探すしかない
0364デフォルトの名無しさん
2014/12/16(火) 17:33:48.74ID:s73lo1GC0365デフォルトの名無しさん
2014/12/16(火) 17:55:18.76ID:hwVZaqlZ小保方メソッドだ文句あるか?
0367デフォルトの名無しさん
2014/12/17(水) 08:17:01.35ID:LQjd3G0Dわかる方いたらお願いします。
0368デフォルトの名無しさん
2014/12/17(水) 11:10:38.77ID:rf7y+NCOぱっと見、ないみたいですねww
最適化してますが、瓜では
0369デフォルトの名無しさん
2014/12/17(水) 19:33:03.48ID:LQjd3G0Dなさそうですよね。
ありがとうございました!!
0370デフォルトの名無しさん
2014/12/17(水) 20:27:06.54ID:b8H2zT1Rこの画像の続きの引数strの中に指定した文字がいくつ含まれているかを返す関数を教えてください
strlenは使えません
0371デフォルトの名無しさん
2014/12/17(水) 20:44:43.97ID:uIUzJbFtint i = 0;
while(*str) if ( *(str++) == moji ) i++;
return i;
}
0372デフォルトの名無しさん
2014/12/17(水) 20:50:37.68ID:b8H2zT1Rありがとうございます
感動しました
0373デフォルトの名無しさん
2014/12/18(木) 08:57:17.78ID:dWl/cqiVif(str[i] >= '0' && str[i] <= '9')
cnt[stri[i] - '0']++;
i++
数字文字列を配列に格納するプログラムだけど
cnt[stri[i] - '0']++ の'0' ってなんの意味があるんですか?
0374デフォルトの名無しさん
2014/12/18(木) 09:04:57.49ID:GWJsBoaM数字を数値に変換している
0375デフォルトの名無しさん
2014/12/18(木) 09:10:21.40ID:fxvbSoUEstri[i] - '0' としておけば int cnt[10] で済むから
後者なら '0' の出現回数は cnt[0] で分かるけど、前者は cnt[30] としないと
いけないし、cnt[0] 〜 cnt[29] が全くの無駄になる
0376デフォルトの名無しさん
2014/12/18(木) 09:14:11.29ID:fxvbSoUE文字コードをそのまま使ったら int cnt[58] って宣言する必要があるけど、
stri[i] - '0' としておけば int cnt[10] で済むから
後者なら '0' の出現回数は cnt[0] で分かるけど、前者は cnt[48] としないと
いけないし、cnt[0] 〜 cnt[47] が全くの無駄になる
0377デフォルトの名無しさん
2014/12/18(木) 09:56:59.58ID:yB61vtqq0378デフォルトの名無しさん
2014/12/18(木) 10:11:17.39ID:PpZ3cpAIC のスレだから 0x30 とかでいいよ
0379デフォルトの名無しさん
2014/12/18(木) 10:36:45.52ID:ku5Vlr4A保証されていた筈。
EBCDICでも数字は連続しているから一応問題ないらしい。
その場合、>376はアウトだけれど。
まぁ、int cnt['0' + 10]とした上でcn['0' + 0]でいいんだけどなw
# で、そんな小細工を弄するなら、素直にstr[i] - '0'でいいわけで。
0380デフォルトの名無しさん
2014/12/18(木) 12:36:58.11ID:PpZ3cpAI数字は保証されてる
アルファベットは保証されてない
EBCDIC は途中不連続だから
0381デフォルトの名無しさん
2014/12/18(木) 12:38:33.19ID:/P3mLKZ0ttp://www.kijineko.co.jp/tech/superstitions/A-to-Z-is-sequence.html
[迷信] 'A'〜'Z' の値は連続している
>一方で、数字、すなわち '0'〜'9' の文字コードが連続していることは、C/C++ の規格で保証されています。
0382デフォルトの名無しさん
2014/12/18(木) 12:54:19.80ID:7LvNfPgX0383デフォルトの名無しさん
2014/12/18(木) 15:10:43.43ID:VQhTeA+S皆様、有難うございました
0384デフォルトの名無しさん
2014/12/18(木) 15:28:17.56ID:gNNDPbPhf( void **x)
って書いてあるのですが、引数xの型がわかりません
0385デフォルトの名無しさん
2014/12/18(木) 15:32:13.85ID:NmnyfhLX0386デフォルトの名無しさん
2014/12/18(木) 16:03:13.64ID:gNNDPbPhvoid**型
についてもう少し説明をお願いします
0387デフォルトの名無しさん
2014/12/18(木) 16:09:02.29ID:NmnyfhLX0388デフォルトの名無しさん
2014/12/18(木) 20:08:03.69ID:on3AHD1c0389デフォルトの名無しさん
2014/12/19(金) 00:58:27.59ID:6yiRzMRAint b;
int *a = &b;
int **x = &a;
*x は、int *型の変数 a へのショートカットになり、
さらに *a は、int型の変数 b へのショートカットになる
というショートカットの数珠繋ぎになっている。
で、void** は、このbの型が不明という状態と、とりあえず考えればいい。
実際にはその関数の仕様に基づいてintとか何かの型にキャストして使うんだけどな。
0390デフォルトの名無しさん
2014/12/19(金) 01:07:28.86ID:6yiRzMRA例えば、f( int **x ); の場合だと、
int *a;
f( &a );
と呼び出すと、f関数の内部で、
f( int **x )
{
*x = malloc(1024);
}
のように、*xのショートカット先となるaにmallocで確保したメモリのアドレス、という値、
を格納することが出来る。
0391デフォルトの名無しさん
2014/12/19(金) 13:56:14.65ID:ycZKbF/wこれVisualStudio出できないの?
0392デフォルトの名無しさん
2014/12/19(金) 16:22:22.80ID:6x5sDQ5c0393デフォルトの名無しさん
2014/12/19(金) 18:48:53.18ID:vI/DNkqN#include <math.h>
double voltage(double t, double f, double vmax)
{
return(f*(vmax*sin(2.0*M_PI*f*t))*(vmax*sin(2.0*M_PI*f*t)));
}
0394デフォルトの名無しさん
2014/12/19(金) 18:49:55.36ID:vI/DNkqN{
int i, n;
double t, a, b, f, v;
double h, sum, result, vrms, vmax;
a = 0.0;
f = 50.0;
b = 1.0 / f;
v = 100.0;
vmax = 100.0*sqrt(2.0);
printf("分割数 n:"); scanf("%d", &n);
0395デフォルトの名無しさん
2014/12/19(金) 18:50:49.70ID:vI/DNkqNsum = voltage(a,f,vmax)/2.0;
for(i=1; i<n; i++)
{
t = a + h*i;
sum += voltage(t,f,vmax);
}
sum += voltage(b,f,vmax)/2.0;
result = sum*h;
vrms = sqrt(result);
printf("最大値 %lf の正弦波交流の実効値の計算結果 = %lf\n", vmax, vrms);
printf("理論値 = %lf\n", v);
printf("理論値との誤差 = %lf", vrms - v);
return(0);
}
0396デフォルトの名無しさん
2014/12/19(金) 18:53:28.14ID:vI/DNkqNどなたかお力添え頂けないでしょうか(´・ω・`)
0397デフォルトの名無しさん
2014/12/19(金) 20:29:45.28ID:ouqnqJMl0398デフォルトの名無しさん
2014/12/19(金) 20:34:29.20ID:Ak6+g1yPせめてこの公式をプログラムにしたんですが何が違うんでしょうか?などプログラムが分かる人向けの質問にしましょう
そうでなければ、0が出力される?そりゃあそういうプログラムを書いたからそうなるんでしょ、としか返事が来ないですよ
0399デフォルトの名無しさん
2014/12/19(金) 20:47:03.20ID:kXOboZoh0400デフォルトの名無しさん
2014/12/19(金) 20:49:12.08ID:DN7z/e4Wなにが不満なんだ?
0401デフォルトの名無しさん
2014/12/19(金) 23:25:00.22ID:OyBX97fwレベルが高いスレに移動します(´・ω・`)
0402デフォルトの名無しさん
2014/12/20(土) 00:25:20.64ID:+GgZ8JtGX printf("理論値との誤差 = %lf", vrms - v);
O printf("理論値との誤差 = %g", vrms - v);
0403デフォルトの名無しさん
2014/12/20(土) 01:15:14.26ID:5qXzegsd0404デフォルトの名無しさん
2014/12/20(土) 04:05:10.91ID:I3+T4+Bzレスありがとうございました
なんとか解決できそうです
0405デフォルトの名無しさん
2014/12/21(日) 12:41:51.18ID:Hdj7JKbVは型はなんと呼ぶのでしょう?
pはポインタ型、intへのポインタ(型)、int * 型
どう呼ぶのが正しいですか。
0406デフォルトの名無しさん
2014/12/21(日) 12:45:58.22ID:2uIIlTTp0407デフォルトの名無しさん
2014/12/22(月) 00:17:19.33ID:zUGYDvYd0408デフォルトの名無しさん
2014/12/22(月) 02:13:56.42ID:vbo5gTQH0409デフォルトの名無しさん
2014/12/22(月) 03:10:48.21ID:/EfTNU+Y0410デフォルトの名無しさん
2014/12/23(火) 16:46:01.18ID:eZDNRIeaお世話になります。
私、責任者の加茂と申します。以後、宜しくお願い致します。
http://www.apamanshop.com/membersite/27009206/images/kamo.jpg
浪速建設様の見解と致しましては、メールによる対応に関しましては
受付しないということで、当初より返信を行っていないようで、今後につい
てもメールや書面での対応は致しかねるというお答えでした。
http://www.o-naniwa.com/index.html 事務員 東条 南野
http://www.o-naniwa.com/company/
このように現在まで6通のメールを送られたとのことですが、結果一度も
返信がないとう状況になっています。
http://www.apamanshop-hd.co.jp/
http://www.data-max.co.jp/2010/10/01/post_11983.html
私どものほうでも現在までのメール履歴は随時削除を致しております
ので実際に11通のメールを頂戴しているか不明なところであります。
・ハンガー・ゲーム http://s-at-e.net/scurl/TheHungerGames-Aircraft.html
・アバター http://s-at-e.net/scurl/Avatar-Shuttle.html
・艦これ http://s-at-e.net/scurl/KanColle.html
・BRS http://s-at-e.net/scurl/BRS.html
・ベヨネッタ http://s-at-e.net/scurl/BAYONETTA.html
・風ノ旅ビト http://s-at-e.net/scurl/JOURNEY.html
http://s-at-e.net/scurl/kabetokyojinto.html
・2012 http://s-at-e.net/scurl/2012.html
大阪府八尾市上之島町南 4-11 クリスタル通り2番館203
に入居の引きこもりニートから長期にわたる執拗な嫌がらせを受けています。
この入居者かその家族、親類などについてご存知の方はお知らせ下さい。
[email protected]
0411デフォルトの名無しさん
2014/12/23(火) 17:24:44.21ID:+lmK68Kp0412デフォルトの名無しさん
2014/12/24(水) 12:12:45.21ID:3XqKPdGM構造体のありがたみがいまいちわかりません。
どういった場合に構造体あって良かった。ほんとに良かったって思うのでしょうか。
0413デフォルトの名無しさん
2014/12/24(水) 12:20:39.17ID:QqT3gjby関数の戻り値がたくさん欲しい時。
0414デフォルトの名無しさん
2014/12/24(水) 12:41:26.02ID:phVcrnaVRPGゲームでキャラのパラメータ等を構造体で一纏めにするのと、個別に変数用意するのとどちらが楽か。
0415デフォルトの名無しさん
2014/12/24(水) 14:30:27.38ID:X2i6KVz2char p[] = "ABC";
return(p);
}
int main(void){
printf(""%s\n", abc());
return 0;
}
これうまくコンパイルできないけど、どうしてですか?,
0416デフォルトの名無しさん
2014/12/24(水) 14:55:10.83ID:2KMwjQaKコンパイルできないことはないと思うぞ。
コンパイルできなかったと言う主張なら、エラーメッセージを貼れ。
まぁ、想定通り動くかと聞かれたら鼻から悪魔だが。
0417デフォルトの名無しさん
2014/12/24(水) 14:56:34.19ID:phVcrnaV>printf(""%s\n", abc());
"が多い
printf("%s\n", abc());
char *abc(void){
char p[] = "ABC";
return(p);
}
pの変数は関数abc()が終了した時点で開放されるので非常に危険。
0418デフォルトの名無しさん
2014/12/25(木) 19:50:51.72ID:xrTOXFbF54分だと→0x54というデータが変数に読み込まれます。
ただこの0x54は10進数では、84なので困っています。
BCD形式→10進数表記の変換でいい方法はありませんか??
考えてみたのは…
・ビットシフトする変換関数を作る
・0〜89の配列のテーブルを作って変換する
こんなのですが、何か手はありませんか??
よろしくお願いします!!
0419片山博文MZ ◆T6xkBnTXz7B0
2014/12/25(木) 19:57:39.39ID:gEw73of1{
unsigned int lo = (n&0x0F);
unsigned int hi = (n>>4)&0x0F;
return lo + hi*10;
}
0420デフォルトの名無しさん
2014/12/25(木) 20:13:18.57ID:xrTOXFbFありがとうございます!!!
0421デフォルトの名無しさん
2014/12/26(金) 05:04:03.36ID:p4Lfskne簡単に説明すると、行列自体はダブルポインタで表現して、更にfmatrixという行数、列数、行列へのポインタを格納した構造体を定義してます。
main関数でfmatrix型の変数aを作って、関数new_matrixを使って変数aの初期化をしようとしています・・・。
もし分かる方いたら、どうすればいいか教えてください。m(_ _)m
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int row;
int col;
float*** mat;
} fmatrix;
0422421
2014/12/26(金) 05:05:04.66ID:p4Lfsknevoid new_matrix(fmatrix* a, int row, int col){
float** matrix = (float**)malloc(row * sizeof(float*));
a->mat = &matrix;
int i,j;
for(i=0; i<row; i++){
(*(a->mat))[i] = (float*)malloc(col * sizeof(float));
}
for(i=0; i<row; i++){
for(j=0; j<col; j++){
(*(a->mat))[i][j] = 0.0;
}
}
a->row = row;
a->col = col;
}
int main(){
fmatrix a;
new_matrix(&a, 2, 2);
(*(a.mat))[0][0] = 1.0;
printf("%f,%f\r\n",(*(a.mat))[0][0],(*(a.mat))[0][1]);
printf("%f,%f\r\n",(*(a.mat))[1][0],(*(a.mat))[1][1]);
return 0;
}
0423デフォルトの名無しさん
2014/12/26(金) 05:10:15.65ID:fnDLLhrSそれ自体の開発が必要か。
0424421
2014/12/26(金) 05:23:44.17ID:p4Lfskne0425デフォルトの名無しさん
2014/12/26(金) 07:28:11.01ID:YUWTiv3stypedef struct{
int row;
int col;
float** mat; /* ←!! changed !! */
} fmatrix;
こうして
a->mat = (float**)malloc(row * sizeof(float*));
以下 そのまま
0426421
2014/12/26(金) 08:10:41.50ID:p4Lfskneただ、もとのプログラムがなぜダメなのか結局よく理解できていません。
元のほうの発想は、ご指摘の通りmatはmallocした領域を指すポインタ変数として使おうとして、
(*(a->mat))[i][j] のようにすれば行列にアクセスできるのではないかと思ったのですが・・・。
matがfloat***だと、(*(a->mat))はfloat**になりますよね?
0427デフォルトの名無しさん
2014/12/26(金) 09:00:59.04ID:PUSaAK8wそれでいいんじゃない?
float* fpの1番目の要素はfp[1]とアクセスするわけだし
0428デフォルトの名無しさん
2014/12/26(金) 11:56:13.32ID:oOKeETov(厳密な話はおいといて)
new_matrix() から抜け出した瞬間に new_matrix関数内の変数の存在は無くなる
new_matrix内の変数の位置を a->mat に記憶したとしても
上記のことがあるから、
いざ使おうとした時には、存在の無い変数へのポインタとなり、不正アクセスを起こす
0429あ
2014/12/26(金) 12:24:17.14ID:B31hRDonl:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::// ヽ::::::::::::::l
l:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::/:::「'ヽ:::::::::::// ヽ:::::::::::|
|::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ノl:::ノ l:::::::/ ヽ::::::::|
ノ:::::::::::::::::::::::::::::::::::::::::::::::::::::/ ゙゙ ノ:::/ ,,;;;;;;,, ,,,,ヽ:::::l
):::::::::::::::::::::::::::::::::::::::::::::::/ ノ/ __,'''i: ('''__):::l
)::::::::::::::::::::::::::::::::::::::::::::::::::/  ̄ ̄ン:. :「 ̄`ヾ
1:::::::::::::::::::::::「 `┤l:::::::::::::::::l  ̄ , ヽ ̄ l
`l:::::::::::::::::::::ヽ :l li:::::::::::::/ ヽ /´ `l |
ヽ::::::::::::::::::::::\_」 lヽ::::/ .l !:-●,__ ノ /
ノ:::::::::::::::::::::::::::ノ | l `゙゙ i ,,;;;;;;;;;;;;;;;;;;;;, /ヽ
,/ ヽ::::::::::::::::::::::( l l::::::::.. /.:''/´ ̄_ソ / `ヽ
ヽ:::::::::::::::ヽ | l:::::::::::... /::// ̄ ̄_ソ / \ ヴッ!!
ヽ:::::::\| l::::::::::::::::... / :::.ゝ` ̄ ̄/ / ヽ
ヽ:::l l:::::::::::::::::::..  ̄ ̄;;'' / ヽ
l l;;;;;;:::::::::::::::.....;;;;............;;;;;;''ノ l
l l '''''''''''''''''''''''''''''''''''''' ̄l | |
http://www.youtube.com/watch?v=z2qK2lhk9O0
0430デフォルトの名無しさん
2014/12/26(金) 15:19:02.71ID:gYFf9bfEコード17行目の発展課題の問題がうまくいきません。
26行目の関数を定義します。
定義した関数は70行目からです。
13行目のscanf関数でdata変数にいれた文字列の整数部分を抜き出す関数を定義したいです。
67行目注釈のローカル変数を一切使用しないの部分で詰まってしまいます。
http://codepad.org/3qrG7JsB
よろしくお願いします。
0431デフォルトの名無しさん
2014/12/26(金) 15:32:25.99ID:oOKeETov引数の char *data だけで
あとは、ローカル/グローバル変数使わずになんとかしろと…
return に生で並べるのも無理っぽいし
sizeof(char) と sizeof(int) の差とか どーすんべ?
0432デフォルトの名無しさん
2014/12/26(金) 15:40:31.41ID:fRJuoMI0return atoi(data);
}
0433デフォルトの名無しさん
2014/12/26(金) 15:41:38.37ID:oOKeETov再帰で書けないか考えてたけど。。。
0434デフォルトの名無しさん
2014/12/26(金) 15:56:53.48ID:XKXMWky3修正する前の、元の問題文は?
0435デフォルトの名無しさん
2014/12/26(金) 16:38:42.14ID:fzLOFCnjとりあえず動くのは確認した。他の部分はそのままな。
まず最初んとこ。これはそのまま。
num = a2num( data );
ふたつめのとこ。continueを勝手に使った。isdigitも勝手に使った。
countの扱いは元の実装を尊重してそのままに。
if(*data == '0' || !isdigit(*data)){
printf("Please re-enter correct number\n");
count = count - 1;
continue;
}
三つ目んとこ。まずaptrを数字が終わったとこまで進めた。
あと、単位名がないときは素の入力として正しいとした。
単位名が微妙に間違ってるときも単に、無いときと同じ処理。
strstrを使ったりせず、とりあえず、aptr進めてのstrcmpだけ。
単位名ない時や間違ってるとき何かしたいなら最後にelseつけてそこに書くこと。
for (aptr = data; isdigit(*aptr) ; aptr++) {}
if (strcmp(aptr, unit1) == 0) {
num = num * 1000;
} else if (strcmp(aptr, unit2) == 0) {
num = num * 1000 * 1000;
} else if (strcmp(aptr, unit3) == 0) {
num = num * 1000 * 1000 * 1000;
}
sum += num;
0436430
2014/12/26(金) 17:43:57.32ID:gYFf9bfE返答ありがとうございます。
もとのソースコードです。
自分の説明の仕方が下手だったので申し訳ないですが、わからない部分は定義した関数
num = a2num( data );
の中身のことです。
もとのソースコード
http://codepad.org/zn4I2Rwe
問題は、
「単位付きの表現を許容した数のデータを任意の個数キー入力で与え、それらの和を計算して出力するプログラムの作成」です。
0437430
2014/12/26(金) 18:00:03.35ID:gYFf9bfEコピペでみづらくてすみません。
http://codepad.org/J1bbKR2c
0438デフォルトの名無しさん
2014/12/27(土) 20:18:52.80ID:OgKFx8GGお手本みたいなサイトがあるのでしょうか?
0439デフォルトの名無しさん
2014/12/27(土) 20:21:43.84ID:6PxqP7Piこれ俺も気になる
いつも英語翻訳サイトみたり、悩む
0440デフォルトの名無しさん
2014/12/27(土) 20:23:09.18ID:kD8p/mFM業務で行う場合はコーディングルールで命名規則も決めてあるのが当然。
オープンソースなどの開発に個人的に加わるなら、既にあるコードを参考にすれば良い。
別に悩む必要がある問題だとは思えない。
0441デフォルトの名無しさん
2014/12/27(土) 20:25:38.15ID:sU4lvWRv極論するが、プログラミングなんて、名前こそが全てだ。
0442デフォルトの名無しさん
2014/12/27(土) 20:27:40.22ID:OgKFx8GG0443デフォルトの名無しさん
2014/12/27(土) 20:36:36.62ID:kD8p/mFMプログラミングにはアルゴリズムや処理内容を考えるのを優先させた方がいいよ。
変数名や関数名などの名前は、後からどうにでも編集しなおせる。
ちゃんとした処理内容なら名前などどうでもプログラムはちゃんと動作する。
逆に、どんなに美しい名前が使ってあっても、ちゃんとした処理内容でなければ
プログラムはちゃんと動作しない。
ちゃんと動作しないプログラムは無意味どころか有害であり、そんなものを作る
ような人間は無意味どころか有害なのである。
つまり、死んだほうがまし、生きている意味はない。
0444デフォルトの名無しさん
2014/12/27(土) 20:39:50.32ID:6PxqP7Pi0445デフォルトの名無しさん
2014/12/27(土) 20:47:29.33ID:PS8qPAgg> お手本みたいなサイトがあるのでしょうか?
クラス名・変数名に迷ったら書き込むスレ。Part25 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1416550677/
お手本になるかどうかは知らん
0446デフォルトの名無しさん
2014/12/27(土) 20:57:01.36ID:kD8p/mFMちゃんとした名前がついていないとコードが読めないような能力なら、
他人のコードを読んではいかん!
世の中の迷惑になる!
0447デフォルトの名無しさん
2014/12/27(土) 20:58:29.93ID:6PxqP7Piそういう能力の人にも読みやすいコード書けないのはダメでしょ
一部の天才のみ解読可能な素晴らしいコードは必要とされてないよ…
0448デフォルトの名無しさん
2014/12/27(土) 21:27:02.28ID:kD8p/mFMどこまで卑屈なんだよ…そんな卑屈な根性で世の中に出ようなんて「甘え」だ!
0449デフォルトの名無しさん
2014/12/27(土) 21:32:25.67ID:zG3QCJrf英語できない生徒もいるだろうし
0450デフォルトの名無しさん
2014/12/27(土) 21:41:22.36ID:OgKFx8GG0451デフォルトの名無しさん
2014/12/27(土) 22:08:57.61ID:RtAogloBスペルミスだけは気をつけろ
保守されるたびに恥をかく事になる
0452デフォルトの名無しさん
2014/12/27(土) 22:25:35.60ID:mX32OpPYそうすればそれ以降自分がいないと保守できないという理由でずっと給料がもらえる
0453デフォルトの名無しさん
2014/12/27(土) 22:28:44.59ID:IKFUrjms甘いというより、仕事した事無いだろ。
0454デフォルトの名無しさん
2014/12/27(土) 22:30:02.09ID:PS8qPAggそんな生徒がプログラム言語なんて習得できるんか?
0455デフォルトの名無しさん
2014/12/27(土) 22:32:47.38ID:mX32OpPY0456デフォルトの名無しさん
2014/12/27(土) 22:55:10.36ID:9qQU0LAxなんてことがあるんだな(Cでは無かったけど^^;
0457デフォルトの名無しさん
2014/12/27(土) 23:01:33.79ID:zG3QCJrf初心者にとってのプログラム言語なんて魔法の呪文と一緒さ
意味は分からないけど書けば動く
0458デフォルトの名無しさん
2014/12/27(土) 23:36:30.76ID:jliWhhuZ名前を一括で変える機能位、普通の開発環境なら付いてるだろ?
0459デフォルトの名無しさん
2014/12/27(土) 23:57:42.32ID:Z5TU2mXJほぼ完成になった頃にスペルミスに気づいて全部置換したことある
あぶなかった…
0460421
2014/12/28(日) 04:19:02.47ID:9wCMsq9zなるほど。ポインタ渡しだから問題ないやと思ってたら、渡されたポインタに
新しく関数内で生成したポインタを関連づけてたから駄目だったんですね。
ありがとうございました。
0461デフォルトの名無しさん
2014/12/28(日) 05:27:52.36ID:z0zOxBOd昔のCOBOLソースとかだと変数台帳とかあって
関数とか変数を新設したいときに申請して番号貰うんだけど
FUNC0213でH2987の変数を使うとかでマジ地獄だった
0462デフォルトの名無しさん
2014/12/28(日) 05:42:49.56ID:7DhnBLGM0463デフォルトの名無しさん
2014/12/28(日) 08:27:16.34ID:lHLjVUEsだったら読む方がその機能で読みやすくすりゃあいいだけだな。
なんだやっぱり作る時に気にする必要ねえじゃんwww
0464デフォルトの名無しさん
2014/12/28(日) 10:25:21.46ID:ce638Dr+0465デフォルトの名無しさん
2014/12/28(日) 10:44:16.67ID:uZelGoi1理由を添えてどうぞ
0466デフォルトの名無しさん
2014/12/28(日) 10:45:18.88ID:ce638Dr+最初から読みやすくかけよ
それだけ
0467デフォルトの名無しさん
2014/12/28(日) 10:50:08.88ID:lHLjVUEsそれが他人にものを頼む態度かぁ!バカチンがぁ!
もっと謙虚になれ!お前は所詮物知らずの無能だぁ!
0468デフォルトの名無しさん
2014/12/28(日) 11:08:40.03ID:q/uppUq6そいつにレスしても面白いこと返ってくるわけじゃないから放置しとき
0469デフォルトの名無しさん
2014/12/28(日) 14:01:04.99ID:8lQU0KjQ普通書く奴は一人、読む奴は(自分も含めて)多数
どっちが対応すれば効率的かは、アホでもわかる
まあ >>463 が作るソフトを読む奴なんていないと言う可能性もあるけどな w
0470デフォルトの名無しさん
2014/12/28(日) 18:53:17.46ID:SJYHrnZm企業でも開発要員は複数いる事が当然だし、オープンソースに至っては
へたすりゃ不特定多数、こんな状況で「お前がやれば俺が楽できる」とか
傲慢な考え方で2chで吠えるだけ…
冬休みだから厨房が多数跋扈してるな…
0471デフォルトの名無しさん
2014/12/28(日) 19:11:17.93ID:gEEplCVC0472デフォルトの名無しさん
2014/12/28(日) 19:39:40.39ID:AQDitcxr> 企業でも開発要員は複数いる事が当然だし
あるコードの一行は、とか書いてないとわからんアホがいるとはな w
0473デフォルトの名無しさん
2014/12/28(日) 19:42:18.68ID:SJYHrnZm0474デフォルトの名無しさん
2014/12/28(日) 19:51:19.17ID:AQDitcxrで、一行は大抵一人で書くことは理解したかね w
0475デフォルトの名無しさん
2014/12/28(日) 19:57:25.03ID:SJYHrnZm確度で判明してきたね…
しかし、根が馬鹿だからプログラミングやましてやCなど全然分かっては
いないというオチか…
0476デフォルトの名無しさん
2014/12/28(日) 20:24:03.47ID:AQDitcxr> 根が馬鹿だから
ふむ、馬鹿と言えば済むと思ってるアホか… w
0477デフォルトの名無しさん
2014/12/28(日) 20:29:14.26ID:SJYHrnZmかなり進歩がのろいね、してみると冬厨よりは年食った新参か?
0478デフォルトの名無しさん
2014/12/28(日) 20:39:58.63ID:0+6VFReW0479デフォルトの名無しさん
2014/12/28(日) 20:47:58.78ID:FC75I7qD0480デフォルトの名無しさん
2014/12/28(日) 21:08:14.21ID:LtKNqxAk返しがつまんないよ
どうせまともな反論できないんだから、もっと面白いレスしろよ
0481デフォルトの名無しさん
2014/12/28(日) 21:21:19.01ID:SJYHrnZmかなり高齢の新参だな。へたすると5〜60台かもしれんね…
0482デフォルトの名無しさん
2014/12/28(日) 23:37:15.39ID:2AqgJp2wC99とかC11の扱いはどうなってるんでしょう?
0483デフォルトの名無しさん
2014/12/28(日) 23:40:23.00ID:uI4zT0fw0484デフォルトの名無しさん
2014/12/29(月) 12:57:47.24ID:2ONkfPMtVCならC99だけどgccやIntel C++ならC99が一般的では
0485デフォルトの名無しさん
2014/12/29(月) 13:02:11.30ID:Dgi09YwQ0486デフォルトの名無しさん
2014/12/29(月) 14:04:40.50ID:2Hhe9fk+0487デフォルトの名無しさん
2014/12/29(月) 18:18:04.21ID:330p/8W60488デフォルトの名無しさん
2014/12/30(火) 20:28:32.39ID:LbwsODz20489デフォルトの名無しさん
2014/12/31(水) 02:59:30.93ID:7wvwAZHy最初にメインルーチンで諸々の設定をして構造体に値を突っ込み
サブルーチンに構造体ごと値を渡し、計算して値を返すという普通のプログラムなのですが
コンパイルが通り実行してみると動作が停止してしまいます
デバッグ用に要所でテキスト出力をさせてみたのですがメインルーチンでサブルーチンを呼び出す直前までは正常に動作しており
サブルーチンの変数定義直後のテキストが出力されず動作が停止しているようです
よって変数定義の部分で何か間違いがあるとは思うのですが全く見当がつきません
アバウトな内容で申し訳ないのですが変数定義部分で動作が停止してしまう原因として考えられる事は何があるのでしょうか?
よろしくお願いします
0490デフォルトの名無しさん
2014/12/31(水) 03:07:32.10ID:hwPZZsoy貼れ
0491デフォルトの名無しさん
2014/12/31(水) 03:07:48.06ID:qGDSws/U同じ現象が起きる、短いコードが書けないかな?
そういうのがあると分かるかも知れんが
0492デフォルトの名無しさん
2014/12/31(水) 03:43:27.82ID:7wvwAZHy#include <stdio.h>
#include <math.h>
*関数のプロトタイプ宣言諸々*
struct node{ int x[256]; int parent[256]; int child[256][256] };
struct Test{ int x1[256]; int parent1[256]; int chlld[256][256];
x2[256]; int parent2[256]; int child[256][256]};//テスト用
int main(){
*変数定義メインルーチン処理*
printf("check:テスト前\n");
Ans = subSearch(Tree,NN,k)// Ans : Test型 Tree : node型 NN,k : int型
*テキスト出力*
}
struct Test subSearch(struct node Tree, int root, int k){
int i,j,r,s;//ループ用変数
struct node subTree1;
struct node subTree2;//部分木2
int nowchild[256];
int nextchild[256];
struct Test Test;//テスト用構造体変数の宣言
printf("check サブルーチン変数宣言直後\n");
*サブルーチン処理*
return Test;
}
こんな感じです
何かおかしなところありませんか?
0493デフォルトの名無しさん
2014/12/31(水) 03:49:45.48ID:7wvwAZHystruct Test{ int x1[256]; int parent1[256]; int chlld[256][256];
x2[256]; int parent2[256]; int child[256][256]};//テスト用
ではなく
struct Test{ int x1[256]; int parent1[256]; x2[256]; int parent2[256];};//テスト用
です
影響はないと思いますが同じ変数の二重定義みたいになっていておかしかったので訂正します
0494デフォルトの名無しさん
2014/12/31(水) 04:12:06.24ID:7wvwAZHyttp://codepad.org/LQBG3Uuw
短いコードで同じ状況を再現できなかったので丸ごとソースを上げます…
よろしくお願いします
0495デフォルトの名無しさん
2014/12/31(水) 04:15:45.19ID:AXb0OOQU構造体のポインタを送ればよろし
0496デフォルトの名無しさん
2014/12/31(水) 04:30:35.26ID:avW0I5reint型で256×256の2次元配列を含む構造体を引数にするのは無茶だと思う。
他の人も言っている通りポインタで渡すのが無難。
0497デフォルトの名無しさん
2014/12/31(水) 04:35:47.70ID:7wvwAZHyポインタ*spを宣言しサブルーチンに値を渡す110行目付近の
Test = MaxDSSearch(Tree,NN,k);
を
*sp = Tree;
Test = MaxDSSearch(*sp,NN,k);
にしてみましたが同じところで動作が停止してしまいます
構造体のポインタを送るとはこのやり方って合っていますか?
0498デフォルトの名無しさん
2014/12/31(水) 04:37:59.47ID:AXb0OOQUガベコレのある言語から移植してきたみたいだ
0499デフォルトの名無しさん
2014/12/31(水) 04:48:19.68ID:7wvwAZHychild[256][256]の先頭にポインタを置いて引数にするということでしょうか?
すると構造体Treeをx、parentとchildの2つに分ければいいのでしょうか
>>498
自動変数で調べてみましたがインクリメントに使っているrとsの事でしょうか?
あるノードの部分木全てのノードを書き出したかったのですが他の方法が思い浮かばなかったものでこのように記述しました
この方法だと何か問題が起きますか?また何か他に良い方法はないでしょうか?
0500デフォルトの名無しさん
2014/12/31(水) 05:45:18.17ID:zWWIKK1Y>nextchild[r] = Tree.child[nowchild[i]];
>subTree1.x[s] = Tree.child[nowchild[i]];
の意図が不明だ…
0501489
2014/12/31(水) 05:54:13.19ID:7wvwAZHynowchild(部分木の現在探索している高さのノードの集合)は左詰めでノード値が入っているはずなのでダミー(-1)でないときに実行します
1行目はnowchildに入っているノード値それぞれのchildを全てをnextchild(次の探索する高さのノードの集合)に値を入れます
2行目は1行目と同様にsubTree1.x(1つ目の部分木のノードの集合)にも追加します
その後のforループでnextchildを次のnowchildとし、同時にnextchildの値を初期化します
これでどうでしょうか?
0502デフォルトの名無しさん
2014/12/31(水) 06:22:33.50ID:woC6oG1bTree.childは2次元配列として定義しているのに1次元の配列として参照しているからエラーになるんだが。
0503489
2014/12/31(水) 06:29:38.66ID:7wvwAZHy!!本当ですね…
何故気付かなかったのかというのもそうですがこの場合エラー吐いてくれないんですね…
ちょっと修正してみます!ありがとうございます
0504デフォルトの名無しさん
2014/12/31(水) 07:39:06.55ID:woC6oG1bテストデータのデータ構造や処理の中身はよく分からないが、
アルゴリズムの部分のループの最後でgamma**などの配列の
インデックスが負になって実行時エラーが発生しているな。
0506デフォルトの名無しさん
2014/12/31(水) 09:55:55.32ID:4yI/XMNB0507デフォルトの名無しさん
2014/12/31(水) 10:15:51.95ID:aqCI7mJ+0508デフォルトの名無しさん
2014/12/31(水) 12:42:32.67ID:qGDSws/U他言語との兼ね合いでローカル変数とだけ教わったんじゃないの
C系以外であれを自動変数って呼ぶ文化あんまないし
0509デフォルトの名無しさん
2014/12/31(水) 12:43:40.19ID:U0APx8aX0510デフォルトの名無しさん
2014/12/31(水) 13:30:38.16ID:4yI/XMNB今はネット上の断片的な知識だけでcのプログラムが書けてしまうからなぁ。
でも、cはちゃんとした書籍で勉強したほうが良いよ。
0511デフォルトの名無しさん
2014/12/31(水) 13:49:25.95ID:vgeDgSob0512デフォルトの名無しさん
2014/12/31(水) 14:27:00.43ID:k5fEX/jC0513デフォルトの名無しさん
2014/12/31(水) 14:27:46.25ID:k5fEX/jC0514デフォルトの名無しさん
2014/12/31(水) 14:39:19.75ID:4yI/XMNB排他の仕組みは、かなり細かいレベルまで理解してないと
必要な所にロックが無かったり、不必要な所に無駄なロックがあったりとかなるんじゃないの?
運良くたまたま問題なく動いているようなマルチスレッドコードを見かける事がある。
0515デフォルトの名無しさん
2014/12/31(水) 14:41:15.55ID:4yI/XMNBマルチスレッドを極めてる分けじゃないので自分の知らない落とし穴がありそうでw
0516デフォルトの名無しさん
2014/12/31(水) 14:45:53.95ID:k5fEX/jCちなみに俺はデッドロックの記念にスクショ取るような奴だから
もちろん使いこなせてはいません。。
0517デフォルトの名無しさん
2014/12/31(水) 14:57:10.64ID:nAbDlIQVついていけない
0518デフォルトの名無しさん
2014/12/31(水) 15:07:46.82ID:4yI/XMNBマルチタスクと言った場合、マルチスレッドとマルチプロセスの両方を含むんじゃないの?
マルチスレッドは、同じメモリ空間内で複数の処理が同時実行される。
0519デフォルトの名無しさん
2014/12/31(水) 15:14:49.52ID:y3Bru/20公衆トイレにカギが付いているかいないかの違い
0520デフォルトの名無しさん
2014/12/31(水) 15:16:56.14ID:grXbYJWVC#だとかは言語仕様でマルチスレッドが考慮されてて簡単だけど、
CとかはOSが提供するAPIを直接使う必要があって面倒だよな
0521デフォルトの名無しさん
2014/12/31(水) 15:40:46.44ID:4yI/XMNBそのc#がクセ者なのよ。
一見簡単なので安易に使いたがるヤツがいる。スキルの無いヤツほど使いたがるw
0522デフォルトの名無しさん
2014/12/31(水) 15:43:18.04ID:oxyyKCIiLinuxによる並行プログラミング入門
http://www.amazon.co.jp/dp/4320123808
これよかった
0523デフォルトの名無しさん
2014/12/31(水) 15:46:58.88ID:8O8ksT0Rディレクトリ→フォルダみたいに。
0524デフォルトの名無しさん
2014/12/31(水) 15:51:52.31ID:oAGy3gWfマルチタスクはOS機構で、マルチスレッドはプログラム、コンパイラ側の機構では?
0525デフォルトの名無しさん
2014/12/31(水) 15:51:58.22ID:grXbYJWVasync/awaitなんて、今までの書き方そのままで、
時間のかかる処理にキーワードを付けるだけでその部分をマルチスレッドで
実行してくれるし
linqなんかも配列処理を裏で自動的にマルチスレッド処理してくれるしで、
もはや、こうすれば早くなる程度しか分からない人でも使えるようになってるからな
0526デフォルトの名無しさん
2014/12/31(水) 15:53:03.06ID:4yI/XMNBカギは付いているが掛けるかどうかは利用者の責任で
0527デフォルトの名無しさん
2014/12/31(水) 15:55:02.66ID:4yI/XMNB簡単に実装できるがマルチスレッドの罠も継承されてる。
0528489
2014/12/31(水) 15:58:02.38ID:7wvwAZHyなるほど、childをメインルーチンで計算して値を渡すよりサブルーチンで適宜計算すればいいのですね
確かにローカル変数、グローバル変数とだけ教わりました
とはいっても「関数実行中のみメモリ上のスタックに確保され、関数の実行が終了するとメモリ上から削除される」を忘れてる時点でダメダメですね…
ちなみにこのプログラムは後々サブルーチンを再帰呼び出しする予定なのですが
サブルーチン中でサブルーチンを呼び出すので結局child配列が複数用意されてしまうことになると思います
この場合childをグローバル変数で定義すれば問題ないのでしょうか?
0529デフォルトの名無しさん
2014/12/31(水) 16:01:47.58ID:oAGy3gWfたとえば初期のwindowsは疑似マルチタスクだったし、
大昔にはクライアントサーバー型で端末にほとんど計算機能がないコンピュータがあってこれはマルチタスクだろう。
それと比較してマルチスレッドは本格的には2コア以上のパソコンが出てきた事と関係有るだろ。
0530デフォルトの名無しさん
2014/12/31(水) 16:09:21.52ID:grXbYJWVCの動的確保メモリに対応する、オブジェクトは、
ビルダーパターンで生成専用クラスで確保して、
作成した実体はイミュータブル、すなわちリードオンリーにすることで
それ自体の同期を不要にする、
という設計にするよね。stringクラスとか正にそうだし
0531デフォルトの名無しさん
2014/12/31(水) 16:12:04.27ID:oAGy3gWfメインフレーム - Wikipedia
メインフレームの再評価(2000年代)
絶滅するかと思われたメインフレームだが、特に日本では現在でも大規模な企業・組織で使われ続けている。
?特性上、基幹業務での安定性・信頼性はオープンシステムより優れている。
?クローズドな特性もセキュリティやデータ整合性には、かえって好ましい。
?コスト面で価格性能比が向上し、導入後の保守運用 (TCO) を考慮すれば安価である。
メインフレーム大国
日本は世界有数の「メインフレーム大国」である。2007年時点では、日本のサーバー市場の約4分の1を占め、欧米の2倍以上の金額が費やされていると言われていた。
0532デフォルトの名無しさん
2014/12/31(水) 16:19:49.32ID:oAGy3gWfオンラインゲームとか、携帯とか、広義にはインターネットがサーバーがデータ保持、処理しているクライアントサーバー型だな。
どれだけ端末が処理をしないかに差はあるが。
0533デフォルトの名無しさん
2014/12/31(水) 16:24:29.02ID:U0APx8aXさすがに雑談スレでやったほうがいいわ
0534デフォルトの名無しさん
2014/12/31(水) 16:34:42.16ID:VRTLG3DLその機能使って、割り込み画像キャプソフトが使えないソフトをキャプしてた。
メモリ確保が大変だったけど。
0535デフォルトの名無しさん
2014/12/31(水) 17:04:59.79ID:4sDUohW8生成専用クラスを使うのにimmutableにできたっけ?friendにするとか?
0536デフォルトの名無しさん
2014/12/31(水) 17:17:19.46ID:4yI/XMNBマルチスレッドは複数コアCPUが登場する前からあるんだが。
で、マルチコアCPUが出てきたので何でもかんでもスレッドにすれば効率良いんじゃないみたいになってる。
0537デフォルトの名無しさん
2014/12/31(水) 17:52:05.53ID:XX+AhETF現状のデータ構造のまま再帰呼び出しすると恐らく破綻する。
既に指摘されているように、自動変数に頼った強引な木構造で再帰呼び出しなどすれば
ほぼ間違いなくスタックがオーバーフローする。
構造体メンバをグローバル変数にすることを検討する前に、再起呼び出しに相応しいデータ構造を
検討する方が先決。
一般的にはC言語で木構造を扱う場合、ノードの情報を配列として持つのではなく、
連結リストとして構成して、データの受け渡しはポインタ経由で行うのが一般的な方法。
0538デフォルトの名無しさん
2014/12/31(水) 18:32:56.75ID:ylwvJZ8NSolaris の native thread でプログラムを組んだ時の事を思い出した…
1 スレッド当たりのスタックサイズがデフォルトでは 2 KB になってて参った
0539デフォルトの名無しさん
2015/01/01(木) 13:33:01.41ID:j61NZUAsスレッドの方がお手軽だからね、プログラムカウンタとスタックだけ手当てしてあげればいい‥
0540デフォルトの名無しさん
2015/01/01(木) 13:42:54.62ID:oXvFvpVMスタックの手当とは?
0541デフォルトの名無しさん
2015/01/01(木) 14:46:50.15ID:Dc/On1Zoスレッドはメモリー空間が同じだから、同期が楽ってだけだろ?
別プロセスだったら共有メモリーとか作らないと行けないし。
0542デフォルトの名無しさん
2015/01/01(木) 15:53:39.51ID:BK9p898t生成と切替のコストが全然違うよ
0543デフォルトの名無しさん
2015/01/01(木) 16:00:25.59ID:oXvFvpVM生成はコスト掛かりそうだが切り替えもそんなにコスト掛かるのか?
スレッド同期とプロセス同期だとコストは違うのはわかるが。
0544デフォルトの名無しさん
2015/01/01(木) 16:29:18.60ID:BK9p898tメモリ空間の切り替えが必要だから
http://d.hatena.ne.jp/naoya/touch/20071010/1192040413
現在は粒度の小さいスレッドがもてはやされている時代、Window**s** には fork() はないので、スレッド一択といっていい
C はそういうところがわかりやすいが、他の言語ではどうなっているんだろうね
0546デフォルトの名無しさん
2015/01/03(土) 23:06:40.10ID:dcjdSJmc0547デフォルトの名無しさん
2015/01/03(土) 23:24:38.54ID:g9tk+6B8Chromeはプロセス実装だがなんかメリットあるんのけ?
0548デフォルトの名無しさん
2015/01/03(土) 23:37:38.63ID:Mi3y7m+B0549デフォルトの名無しさん
2015/01/04(日) 08:02:28.78ID:PO9jzi2P参照するためにはそれ特化のコードがいるとか
0550デフォルトの名無しさん
2015/01/04(日) 09:51:56.19ID:EjbbMTMUバグってても他のプロセスに影響しないし、死ぬのはプロセス単位だから
0551デフォルトの名無しさん
2015/01/04(日) 12:52:24.92ID:g1hkc6vC0552デフォルトの名無しさん
2015/01/04(日) 14:17:14.65ID:37hdpDx00553デフォルトの名無しさん
2015/01/04(日) 19:51:47.45ID:9lboT9rs#include "mystack.h"
int main()
{
Stack *s1, *s2;
size_t size = 100;
s1 = Stack_new(); // 要素を stack.h 内で設定した定数個分確保
s2 = Stack_new(size); // 要素を size 個確保
Stack_delete(s1);
Stack_delete(s2);
return 0;
}
0554デフォルトの名無しさん
2015/01/04(日) 20:12:38.77ID:9lboT9rs関数のオーバーロードはC言語ではできないと思いますが
擬似的に再現することはできますか
#include "mystack.h"
int main()
{
Stack *s1, *s2;
size_t size = 100;
Stack_init(&s1); // stack.c 内で設定した定数個分確保
Stack_init(&s2, size); // 要素を size 個確保
Stack_delete(s1);
Stack_delete(s2);
return 0;
}
0555デフォルトの名無しさん
2015/01/04(日) 20:12:44.17ID:EjbbMTMU基本無理
・C++ を使う
・独自のプリプロセッサもしくはコンパイラを開発する
・s1 = Stack_new(0); // 要素を stack.h 内で設定した定数個分確保
で我慢する
0556デフォルトの名無しさん
2015/01/04(日) 20:15:42.94ID:9lboT9rs連投すみません…
#include "mystack.h"
int main()
{
Stack s1, s2;
size_t size = 100;
Stack_init(&s1); // stack.c 内で設定した定数個分確保
Stack_init(&s2, size); // 要素を size 個確保
Stack_finish(&s1);
Stack_finish(&s2);
return 0;
}
0557デフォルトの名無しさん
2015/01/04(日) 20:16:29.02ID:9lboT9rsやはり size = 0 のようにするのが普通ですか
ありがとうございます
0558デフォルトの名無しさん
2015/01/04(日) 21:37:30.71ID:iUH8ydt/0559デフォルトの名無しさん
2015/01/04(日) 21:39:05.39ID:cj3MqVPN可変長で受けて振り分ければいけると思う
オススメはしない
0560デフォルトの名無しさん
2015/01/04(日) 22:03:19.80ID:9lboT9rsおすすめはしないというのは
予期しない変数を受け取った場合の処理が
面倒ということで合ってますか?
0561デフォルトの名無しさん
2015/01/04(日) 22:09:37.17ID:cj3MqVPNそれもあるけど単に面倒でしょ?
init
resize
と2段階踏踏んだほうが簡単じゃない?
マクロになるけどCSTLのソースとか参考になるかもしれない
0562デフォルトの名無しさん
2015/01/04(日) 22:28:09.23ID:9lboT9rs分けると要素数を指定して確保する場合に
initとresizeを両方書くのが面倒だと思いました(2回確保してますし…)
どのみち足りなくなったらresizeするので両方書くんですが…
CSTLの存在を初めて知りました
見て勉強します
ありがとうございます
0563デフォルトの名無しさん
2015/01/04(日) 22:44:12.53ID:Qu74iV3WあとはC++にする。
0564デフォルトの名無しさん
2015/01/04(日) 22:45:20.96ID:cj3MqVPNreserve的なものを指して言ってるのかと思ったけど
その用途ならまったく気にすること無いよ
足りなくなったら自動で拡張されていくので
resizeする必要はない
0565デフォルトの名無しさん
2015/01/04(日) 22:48:42.83ID:EjbbMTMU無理でしょ
受ける側組んだことあれば知ってると思うが、最低一つの引数は必要だし、引数の個数を知る方法が必要だから
0566デフォルトの名無しさん
2015/01/04(日) 23:22:56.56ID:cj3MqVPNC99限定かな
0567566
2015/01/04(日) 23:31:14.11ID:cj3MqVPNうろ覚えなので分かる人いたらフォローお願いします
0568デフォルトの名無しさん
2015/01/04(日) 23:42:24.96ID:9lboT9rsreserveで合ってます
今、足りなくなったら自動的に拡張するものを自分で作ってます
0569デフォルトの名無しさん
2015/01/05(月) 02:42:46.09ID:R0+uea2O可変引数って実態はva_args型のポインタで受けてるだけでしょ?
番兵でもフォーマット文字列でも引数の個数をintで受けるにせよ
可変引数の関数を作るには引数の個数がわかってないといけない
c99とかどうでもいい
0570デフォルトの名無しさん
2015/01/05(月) 06:45:55.47ID:9nhxbDzeああ、すまん
可変引数マクロがサポートされてるんだな、忘れてたわ
http://qiita.com/saltheads/items/e1b0ab54d3d6029c9593
0571デフォルトの名無しさん
2015/01/08(木) 08:23:53.45ID:Pb+Bou3I「やさしいC」の第4版26ページで
「試しに、次のコードを入力してから「Sample2.c」という名前で保存してください。さっそく、実行してみましょう。」
ってあるんですが、
ここでいう保存、実行って具体的にどういう操作ですか?
環境はMicrosoft Visual Studio Express 2013 for Windows Desktopです。
できましたら1つ1つ操作手順を教えて頂ければ幸いです。
0572デフォルトの名無しさん
2015/01/08(木) 12:56:44.44ID:hmv0dwlGスレ違い。VisualStudio関連のスレでどうぞ。
つーか、その本で勉強する積もりならいっそ
ideone辺りでやった方が捗るぞ。
0573デフォルトの名無しさん
2015/01/08(木) 18:35:22.86ID:MfzVwljPありがとうございます。
ideone便利そうですね。使ってみます!
VisualStudioの方は眠くてボーとしてたので、もう少し自力で調べたりして
分からなかったらVisualStudio関連のスレ行ってみます。
0574デフォルトの名無しさん
2015/01/08(木) 21:29:03.24ID:dQf1lgekすごくいい‥
0575デフォルトの名無しさん
2015/01/08(木) 21:30:04.23ID:dQf1lgek0576デフォルトの名無しさん
2015/01/08(木) 21:32:58.90ID:H1OnwSh4ゆとりって凄いなw感心したw
0577デフォルトの名無しさん
2015/01/08(木) 23:03:54.65ID:ePx2w07M0578デフォルトの名無しさん
2015/01/09(金) 00:53:38.67ID:Jq6Ajx8t我々は当たり前にやっているけど、素人には分からないんだよな。
若手への研修に関わってみて、なるほど言われてみればそうかもな、と思う今日この頃。
0579デフォルトの名無しさん
2015/01/09(金) 01:00:31.00ID:usGL+LII0580デフォルトの名無しさん
2015/01/09(金) 01:01:45.19ID:V7SWMrSz0581デフォルトの名無しさん
2015/01/09(金) 01:16:16.73ID:Jq6Ajx8t0582ビル・ジョブズ
2015/01/09(金) 03:11:23.57ID:gYK3gimWこの1スレの1なんだが
0583571
2015/01/09(金) 08:24:33.86ID:catK9xwHその通りにやったら出来ました。
くだらない質問でしたが、皆さんありがとうございました。
0584デフォルトの名無しさん
2015/01/10(土) 06:05:51.02ID:FyrZ8dzT『txtファイルから情報を読み込み、各行に応じた処理をするプログラム』
を作りたいのですが、どなたか方法を教えてください。
例えばcolor.txtというファイルで
red1
blue2
green6
blue3
red5
green7
green3
red3
と記述されていたとき、
『redなら右の数値の平均値』、
『blueはその系統の行の出現回数』、
『greenなら右の数値の合計』をそれぞれ求めて
printfで
aka=3
ao=2
midori=16
と出力するようなソースです
0585デフォルトの名無しさん
2015/01/10(土) 06:06:40.52ID:FyrZ8dzTFILE *fp;
int red=0,blue=0,green=0;
if((fp=fopen("coler.txt","r"))==NULL){//ファイルの読み込みエラーが発生したため中断
printf("ファイルが開けない\n");
}else{//本来の動作
???????
}
fclose(fp);//ファイルクローズ
printf("red=%d\n",red);
printf("blue=%d\n",blue);
printf("green=%d\n",green);
というソースコードの記述で実現できると思いますが、
??????(各行ごとに読み取ってそのタイプからifかswitchで処理を判断)の部分が穴埋めできません
自力で調べたら「fgets」「strtok」「sscanf」などの専用の関数があるらしいのですが、何分今まで整数型変数(int)を弄るプログラムしかしたことがなかったので文字列(char)とかチンプンカンプンで、関数の使い方がわかりません。
0586デフォルトの名無しさん
2015/01/10(土) 06:16:36.23ID:FyrZ8dzTprintfの中身の"red%d\n"、"blue%d\n"、"green%d\n"は
"aka%d\n"、"ao%d\n"、"midori%d\n"
の間違いです
0587デフォルトの名無しさん
2015/01/10(土) 08:01:51.57ID:lyLN6stF/* 配列やポインタの使い方も覚えないと。とりあえず答え書いていく。検証してないから文句はなし。駄目だったら自分で直すかまた聞く。 */
FILE *fp;
int rCnt, rTotal, bCnt, gTotal, i, ret;
char s[6];
fp = fopen("color.txt", "r");
if (fp == NULL) {
perror(NULL); return -1;
}
while ((ret = fscanf(fp, "%5[^0-9]%d\n", s, &i)) == 2) {
if (!strcmp(s, "red")) {
rCnt++; rTotal += i;
} else if (!strcmp(s, "blue"))
bCnt++;
else if (!strcmp(s, "green"))
gTotal += i;
else {
printf("%s: illegal name\n", s); return -1;
}
}
fclose(fp);
/* EOFはエラーの場合にも返される。区別したいのならferror等を用いること。 EOFでも2でもないということは、要素が2個当てはまらなかった、つまり不正な書式ということ。 */
if (ret != EOF) {
printf("illegal format\n"); return -1;
}
printf("aka=%d\nao=%d\nmidori=%d\n", rTotal / rCnt, bCnt, gTotal);
return 0;
0588デフォルトの名無しさん
2015/01/10(土) 09:25:20.67ID:8rmNJIUK0589デフォルトの名無しさん
2015/01/10(土) 10:02:45.89ID:6YXtk3Rd最大サイズを調べるか予測するかしてバッファを用意した後、関数を呼び出すのが原則
C言語でなければ簡単なのになぜわざわざ Cでやろうとするのか
勉強なのか
0590デフォルトの名無しさん
2015/01/10(土) 10:33:41.35ID:8rmNJIUK0591デフォルトの名無しさん
2015/01/10(土) 10:33:47.25ID:C4apcuaR0592デフォルトの名無しさん
2015/01/11(日) 10:23:46.22ID:DcUKGHAk苦手意識を無くしたいなら、やりながら慣れていくしか
点数取るためのお勉強では・・・
0593デフォルトの名無しさん
2015/01/11(日) 19:34:36.17ID:J04gZGiTint foo(int hoge)
{
int val = 1;
if (hoge > 0) {
val = 2;
}
return val;
}
と
int foo(int hoge)
{
int val;
if (hoge > 0) {
val = 2;
} else {
val = 1;
}
return val;
}
ではどちらが実行性能がよいですか。
前者はifがtrueのとき代入一回分多くなり遅くなると考えますが合ってますか。
0594デフォルトの名無しさん
2015/01/11(日) 20:27:16.86ID:Spj98dsc考え方はそれで合ってるが、多分それぐらいならコンパイラ最適化で変わらなくなる。
ただ、読みやすさから考えて後者を選ぶべき。
0595デフォルトの名無しさん
2015/01/11(日) 21:47:53.21ID:XNnfmRhDアセンブラにしてみれば差が分かる
上をfoo、下をfoo2にした
http://ideone.com/OP8Ydf
前者はifがtrueのとき確かに2回代入されるが
後者はifがtrueのときfalseのブロックを越えるためのジャンプ命令が入る
よって実行される命令数はどちらも同じ
また、ジャンプ命令はパイプラインハザードの原因になりうるため、後者の方が通常は遅いと思った方がよい
PC向けなら確かに最適化してくれるかもね 組み込みだと最適化に頼っちゃいけない
0596デフォルトの名無しさん
2015/01/11(日) 23:09:21.99ID:3ahz/Tk90597デフォルトの名無しさん
2015/01/12(月) 10:06:53.25ID:EgUK47G+ありがとうございました。
実行される命令数は同じなんですね。理解できました。
可読性は確かに後者の方が自然な気ががします。
ただ前者の場合も、戻り値が状態を表すものなら自然に理解できるし、
種類のようなものだと分かりづらい気がしました。
感覚的な話で申し訳ありませんが…。
int foo(int hoge)
{
int val = OFF;
if (hoge > 0) {
val = ON;
}
return val;
}
int foo(int hoge)
{
int val = APPLE;
if (hoge > 0) {
val = ORANGE;
}
return val;
}
0598デフォルトの名無しさん
2015/01/13(火) 13:05:10.00ID:HY0qfaD9俺は593は前者のがいいと思う。特定の場合以外同じ値ということが
わかりやすいし、初期化を明確に行うことはスタイルとしてもいい
というか、後者でも初期値はいれた方がいいね
0599デフォルトの名無しさん
2015/01/13(火) 13:22:56.75ID:CAmwtAZeint foo(int hoge)
{
return "\001\002"[hoge > 0];
}
0600デフォルトの名無しさん
2015/01/13(火) 18:00:41.34ID:H7gF28zbこれとどっちが効率いいんだろ…
int foo(int hoge)
{
return (hoge > 0) + 1;
}
0601デフォルトの名無しさん
2015/01/13(火) 18:54:42.31ID:4E9tx8H3読めない。以上。
0602デフォルトの名無しさん
2015/01/13(火) 19:00:59.68ID:7wiF5/cEメモリーアクセスのない分+1の方が効率良いな。
0603デフォルトの名無しさん
2015/01/13(火) 20:16:50.50ID:UH4NPipkhoge <= 0も特定の場合だと思う。まあ、好みか。
>>599
メモリ参照するから効率悪そう。アーキテクチャによるかな。
0604デフォルトの名無しさん
2015/01/13(火) 21:12:54.89ID:jMPME/xb0605デフォルトの名無しさん
2015/01/13(火) 22:06:26.11ID:sVbshoKD> 特定の場合以外同じ値ということがわかりやすいし
逆に条件が対称(0 以上と負とか)に近いなら、下の方がいいと思う。
0606デフォルトの名無しさん
2015/01/13(火) 22:08:17.83ID:sVbshoKD符号拡張も要るだろうし、分かりにくいし、こんなの書いてきたら小一時間説教しそうだ
0607デフォルトの名無しさん
2015/01/14(水) 02:38:42.15ID:oCBn0OCMメールアドレスが長すぎるとか謎の警告で書き込めない
0608デフォルトの名無しさん
2015/01/14(水) 02:39:15.05ID:oCBn0OCM0609デフォルトの名無しさん
2015/01/14(水) 07:06:07.26ID:Z38vlg9A俺も同じく書けなかったけど、リトライしたら書けたみたい
0610デフォルトの名無しさん
2015/01/15(木) 22:11:06.27ID:BvFMCmmwintやshortのデータはntohlとかntohsとか使えばいいと思うんですが
char配列の文字列を送る場合はどうしたらいいんでしょうか
そもそも変換しなくていいんでしょうか
0611デフォルトの名無しさん
2015/01/16(金) 06:52:46.20ID:ccWeS9bn0612デフォルトの名無しさん
2015/01/16(金) 07:15:02.52ID:Fm0qh1Gn0613デフォルトの名無しさん
2015/01/16(金) 12:58:18.10ID:b2lSaBcL変換しなくていい。
0614デフォルトの名無しさん
2015/01/16(金) 17:43:50.92ID:J4i4Oy5g0615デフォルトの名無しさん
2015/01/16(金) 19:18:37.81ID:49OvZmoV配列や関数の名前を参照するとポインタになったりと、
今となってはどうでも良いような謎なこまやかな気配りがあったりする一方で、
switch文にbreakが必要だったりと肝心なところで適当なんだよな。
0616デフォルトの名無しさん
2015/01/16(金) 19:28:41.41ID:2x4EEv7MそんなC言語が私は好きです。
0617デフォルトの名無しさん
2015/01/16(金) 19:46:37.91ID:mZm2rjA/0618デフォルトの名無しさん
2015/01/16(金) 21:50:13.15ID:oLGQ6wLb> switch文にbreakが必要だったりと肝心なところで適当なんだよな。
適当じゃなくて、あえて break 無しでやりたいときにできるようになってるだけ
安全性より自由度を優先した結果でしょ
高級アセンブラーだから
0619デフォルトの名無しさん
2015/01/16(金) 22:20:07.94ID:49OvZmoVフォールスルーしたいときだけ、fall through; って書くようにして、
既定の動作はbreak; で良かったじゃないですか。
つまり今と逆でよかったのでは?
0620デフォルトの名無しさん
2015/01/16(金) 22:25:01.11ID:7lc30MOiアホすぎる。複数のcaseを並べる使い方を知らんのか?
0621デフォルトの名無しさん
2015/01/16(金) 22:27:25.22ID:49OvZmoVって書けるようにすりゃ良いだけじゃん。
0622デフォルトの名無しさん
2015/01/16(金) 22:32:55.77ID:49OvZmoVcase 0, 1, 2:
ね。
てか、C言語は配列の初期化とかも={ 0, 1, 2, };って最後のコンマをわざと許してるんだよね。
後から値を追加する時にそのほうが便利だからって。
そういう細かいところまで考えてあるのに、なぜswtich文はああなってしまったのだろう。
後の言語に多大な負の遺産を残してしまった。
0623デフォルトの名無しさん
2015/01/16(金) 22:34:24.78ID:7lc30MOiそんな余計なことしなくてもいいから、break方式の方がスマートで優れてるんだよ。
0624デフォルトの名無しさん
2015/01/16(金) 22:35:13.70ID:oLGQ6wLbcase 1:
case 3:
case 8:
とかの時に面倒だし、何かを書くと break しなくなると言うのは、違和感あるんじゃね?
0625デフォルトの名無しさん
2015/01/16(金) 22:47:38.13ID:49OvZmoVちなみにC#ではbreakが無いとコンパイルエラーになるように改善されているので、
Cのswtichの仕様が素晴らしいということはまず無い。
0626デフォルトの名無しさん
2015/01/16(金) 22:49:06.07ID:PoJiHUt90627デフォルトの名無しさん
2015/01/16(金) 22:56:46.77ID:GFSPgIgQスレ違いでしたら、誘導していただけるとありがたいです。
0628デフォルトの名無しさん
2015/01/16(金) 23:01:35.93ID:49OvZmoVただのラベルなんだが、それはgoto文のノリで構造化的ではないわ。C言語は一応構造化言語なのに。
例えば関数の最後でreturn忘れたら、フォールスルーして、その下の関数がずら〜と実行されたら嫌だろ?
switch文はまさにそういう状況といえる。
ま、一部の人はたとえCがそういう仕様だったとしても、使い慣れているからという理由で問題視しないんだろうがな。
>>627
googleで "VC++ コマンドライン コンパイル" で検索しれ
0629デフォルトの名無しさん
2015/01/16(金) 23:18:08.89ID:obgM8cFpbreakを使わないで欲しかったかな
ループでもないのにbreakってなんか違和感
0630デフォルトの名無しさん
2015/01/16(金) 23:49:27.20ID:bJx1ILrU> 本来は何も書かなければbreakしないほうが違和感あったはずなのだが。
そう言う言語は fall through できない
> ちなみにC#ではbreakが無いとコンパイルエラーになるように改善されているので、
改善かどうかは人によるでしょ
> Cのswtichの仕様が素晴らしいということはまず無い。
嫌なら自分でプリプロセッサでも書けばいいんじゃね?
0631デフォルトの名無しさん
2015/01/16(金) 23:54:10.74ID:v+mgY+SKってのは困りもんだな。
0632デフォルトの名無しさん
2015/01/17(土) 00:24:57.29ID:1pj2nXtS0633デフォルトの名無しさん
2015/01/17(土) 00:40:41.06ID:MW9qauOG0634デフォルトの名無しさん
2015/01/17(土) 01:13:00.69ID:L8JHemhf0635デフォルトの名無しさん
2015/01/17(土) 02:35:13.21ID:SbteLaC5他はともかく
>そう言う言語は fall through できない
という歴史を作ったのはC言語だと思うよ、良い悪いは別として多方面に影響与えた言語だからね
もしCが「fall throughのときはthrough; 書かずにラベルが来たらswitch抜ける」という仕様なら
その仕様が色んな言語に影響を与えていただろう
0636デフォルトの名無しさん
2015/01/17(土) 05:41:02.53ID:BHVrc4CM> >そう言う言語は fall through できない
> という歴史を作ったのはC言語だと思うよ
C は fall through できるのに、ちょっと何言ってるかよくわからんな w
fall through できない例としては Pascal の case 文とかがある
0637デフォルトの名無しさん
2015/01/17(土) 08:07:31.61ID:SbteLaC5確かに読み直したら表現がおかしくなってた、ちゃんと推敲しろ俺…
C言語ってのは後の言語に多大な影響を与えたワケで、
もしC言語がfall throughのときだけ指定、無指示ならswitchを抜ける仕様だったら
その仕様もまた後の言語に影響を与えたと思う、くらいの気持ち
「そういう言語はfall throughできない」のはあくまで結果でしかないわけで、無理な仕様だとは思わないしな
0638デフォルトの名無しさん
2015/01/17(土) 08:29:36.17ID:QX69Gf/m0639デフォルトの名無しさん
2015/01/17(土) 08:36:33.43ID:BHVrc4CM> 無理な仕様だとは思わないしな
>>624
> 何かを書くと break しなくなると言うのは、違和感あるんじゃね?
0640デフォルトの名無しさん
2015/01/17(土) 11:45:36.89ID:v4dny9bUそれとも一度ファイルなどに書いてやり取りされているのでしょうか?
後者の場合なら連続で通信すると書き換え回数が多くなりまずいのかなと思ってます
0641デフォルトの名無しさん
2015/01/17(土) 13:34:17.13ID:QcVkBDKgエキスパートCプログラミングに
それが原因で全米最大の電話停止が発生したサンプルコードがあったな
break書いたらかなり外側に抜けちゃったっていう
その本だとSunのCコンパイラのソースコードを解析したら
フォールスルー使ってたの3%だったからデフォルト実装がおかしいって論調だった
業務系だとフォールスルーあったほうが便利だったりするな。
一行ifの羅列にするときもあるけど
0642デフォルトの名無しさん
2015/01/17(土) 16:27:02.18ID:FmY8KQo7エキスパートCプログラミング、懐かしい…
そういや + と - を間違えたおかげでマーキュリー3号(だっけか?)が太陽系外へ
スッ飛んでった話も載ってたな
0643デフォルトの名無しさん
2015/01/18(日) 08:02:41.67ID:PD/bNw/rfall through 必要だが。
0644デフォルトの名無しさん
2015/01/18(日) 21:26:28.01ID:Qm+dorGN0645デフォルトの名無しさん
2015/01/19(月) 15:27:00.63ID:KaaVf0G80646デフォルトの名無しさん
2015/01/19(月) 15:33:43.44ID:mrvGfNgZc言語初心者です。
メモ帳に保存した文章をコンパイルしようと試みたのですが、画像のように表示されてしまいます。
ファイルの形式がおかしいでしょうか?
ご指摘よろしくお願いします。
0647デフォルトの名無しさん
2015/01/19(月) 15:52:24.46ID:SGKyw0izつdirコマンド
それとPrint Screen使えない環境なのか?
0648デフォルトの名無しさん
2015/01/19(月) 18:03:54.66ID:ZB3Ka/3L0649デフォルトの名無しさん
2015/01/19(月) 23:27:24.56ID:lWBd6G4l0650デフォルトの名無しさん
2015/01/20(火) 04:56:52.31ID:NtxaKF4n0651デフォルトの名無しさん
2015/01/20(火) 06:54:38.25ID:vt+/jiWm配列を使って蛇の頭から尻尾まで順番に状態を伝搬させていくのかなとは思ったんですがいまいちコードにできません
教えていただければ嬉しいです。
0652デフォルトの名無しさん
2015/01/20(火) 07:50:00.11ID:zL2ZGZ8s0653デフォルトの名無しさん
2015/01/20(火) 11:03:50.47ID:66sje6av大学のpcを用いてるので2chへの書き込みは自分のスマホからしかできないです。
>>647
>>648
プログラミングは専門分野では無く、必修単位のためにやっています。
dirコマンドを調べてみたのですが、使い方がよくわからない状態です。
0654デフォルトの名無しさん
2015/01/20(火) 11:35:13.56ID:AxVJ3avSnotepadで作成した後、
「Z:\>」と表示しているところに、続けて「dir」と入力し、リターンキーを押す。
そこにでてくるファイル一覧から、作成したファイルを探し、
拡張子が「.cpp」となっているかを確認する。
>>648さんは、それが「txt」になっていると言う見解。たぶんそうだと思う。
「Z:\>」と表示しているところに、続けて
「rename 06-01-06.cpp.txt 06-01-06.cpp」と入力し、リターンキーを押す。
その後、もう一度コンパイルから。
0655デフォルトの名無しさん
2015/01/20(火) 11:42:01.40ID:jGkVNXKd0656デフォルトの名無しさん
2015/01/20(火) 13:56:53.49ID:oo8ddG28適性がないから辞めてしまえと強く言いたい所
>>651
クネクネじゃなくて横や縦一線ならできるのかえ?
0657デフォルトの名無しさん
2015/01/20(火) 14:37:50.94ID:6Rnv21lv横一直線や縦一直線に進ませることはできます!
ただキー入力を記憶して伝搬してクネクネさせるのが難しいです…
0658デフォルトの名無しさん
2015/01/20(火) 16:41:25.66ID:rJNm4hf8配列からデータ読み取る時に先頭より前を読み取ろうとしたら最後に、
最後より後ろを読み取ろうとしたら先頭に廻すよう循環させればいいんじゃね?
でなけりゃ線形リストを循環させるとか。
0659デフォルトの名無しさん
2015/01/20(火) 20:10:05.91ID:LXStG+t6dir /?
0660デフォルトの名無しさん
2015/01/20(火) 20:15:33.31ID:Y9tiW1z+エスパーしてみると、スネークの始点と終点だけを保存してる?
もしそうなら、やり方を変えてスネークの最大長(盤面を埋め
尽くす以上にはならない)だけの長さの配列用意したら?
0661デフォルトの名無しさん
2015/01/20(火) 21:17:53.42ID:4I0Y1qEs0662デフォルトの名無しさん
2015/01/20(火) 22:22:21.93ID:vt+/jiWmたとえば頭から方向がRRRRRってなっていたら上を押すとURRRRってなって次にUURRR
ってなって左を押すとLUURR見たいな感じになるようにしたいです!
>>660
一応頭から尻尾まですべてを入れれるだけの配列は用意しています。
0663デフォルトの名無しさん
2015/01/20(火) 22:26:52.08ID:mp2703SQhttp://peace.2ch.net/test/read.cgi/tech/1408962564/401
宿題スレにレスしたよ
0664デフォルトの名無しさん
2015/01/20(火) 22:36:35.05ID:vt+/jiWmありがとうございます!
動作確認しました^^
0665デフォルトの名無しさん
2015/01/20(火) 23:25:49.48ID:vt+/jiWmすいません、読んでみたのですが私大学一年程度の知識しかないのでいくつか分からないところがありました@@;
・snake_dirとは何の変数なのか
・step_snakeとchange_dirとwait_inputが解読できませんでした><
お手隙であればでいいのでどなたか教えていただければうれしいです...
0666デフォルトの名無しさん
2015/01/21(水) 00:52:30.52ID:wB45Fkqg輪になった循環リストを使えば?
0667デフォルトの名無しさん
2015/01/21(水) 03:14:34.06ID:mOiGdMrl小学一年程度の知識の間違いですね
0668デフォルトの名無しさん
2015/01/21(水) 04:02:33.52ID:wB45Fkqg合っているとは限らない
dir は、directionかな?
snake_dirは、ヘビの向かう方向
change_dirは方向転換
step_snakeは、ヘビの動きの刻み(最小単位)
wait_inputは、入力待ちの(入力できない)時間
0669デフォルトの名無しさん
2015/01/21(水) 04:28:22.92ID:tB8VqgXy0670デフォルトの名無しさん
2015/01/21(水) 04:36:16.90ID:R2VIF460ご指摘していただき、ありがとうございました。
0671デフォルトの名無しさん
2015/01/21(水) 09:51:47.50ID:OFD7hqp50672デフォルトの名無しさん
2015/01/21(水) 10:43:42.06ID:ZtHpI46N0673デフォルトの名無しさん
2015/01/21(水) 11:02:34.06ID:OFD7hqp50674デフォルトの名無しさん
2015/01/21(水) 11:34:30.13ID:7mv1WtSh宿題? あるよ。
0675デフォルトの名無しさん
2015/01/21(水) 12:10:43.84ID:2ayQ13oI変数関数の意味は>>668で合ってる
snake_dirは0:右 1:下 2:左 3:上
snake_x,y,head,tailはヘビの体1マスずつの位置をリングバッファ形式で持つ
step_snakeでは
まずヘビの頭からdirの方向の1マス先を見て
その先が壁か自分の体(どちらも@)だったらゲーム終了
空いてればそこに体を伸ばす
しっぽ側はしっぽの先端を空(' ')にして体を縮める
ただしヘビを成長させる(4ターンに1回の)タイミングではしっぽはそのままにする
change_dirでは
方向を引数にもらい変更する
ただし進行方向と逆向き((dir+2)%4)になるような変更は受け付けない
wait_inputでは
1秒間入力待ちして入力があれば(readしてswitchで)入力に応じた処理
入力が無ければ-1を返して終わり
select関数のマニュアル(man select)のサンプルをちょっと変えただけの関数
wait_inputはゲームの入力としてはかなり適当だからとりあえず動きが分かれば別に理解しなくていいんじゃないかな
もともと気にしてるヘビの体の持ち方は「リングバッファ」って構造が理解できればいいと思うよ
0676デフォルトの名無しさん
2015/01/21(水) 20:31:47.35ID:Ot8x9oQKこういう定義があった場合
0x05 = 符号なし
0020a60000 = 10桁
ULL = Unsigned Long Long型
という解釈でいいのでしょうか
0677デフォルトの名無しさん
2015/01/21(水) 23:02:12.66ID:0pZDWm7E0678デフォルトの名無しさん
2015/01/22(木) 13:20:07.84ID:m1M4F4spint *ptr
どっちが正しいの?
0679デフォルトの名無しさん
2015/01/22(木) 13:34:23.56ID:DCqYwtoa0680デフォルトの名無しさん
2015/01/22(木) 14:17:50.46ID:lZgdDssGint (*ptr)[]
どっちが正しいの?
0681デフォルトの名無しさん
2015/01/22(木) 15:49:36.69ID:HcRqz3u40〜50の乱数を発生させそれを当てるゲームを
作成したいです
また入力した数字が正解より大きいか
小さいかも表示しなければいけません
お手数ですがよろしくお願いします
0682デフォルトの名無しさん
2015/01/22(木) 16:01:30.02ID:aykmNMaC0683デフォルトの名無しさん
2015/01/22(木) 16:13:45.76ID:aykmNMaC#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, r;
scanf("%d", &i);
r = rand() % 50;
if (i < r)
printf("Your answer is smaller than correct one.\n");
else (i > r)
printf("Your answer is larger than correct one.\n");
else
printf("Your answer is correct.\n");
return 0;
}
0684デフォルトの名無しさん
2015/01/22(木) 16:16:38.75ID:K4+0s9n9http://ideone.com/QvLiip
0685デフォルトの名無しさん
2015/01/22(木) 22:46:11.62ID:5YbirVjdhttp://ideone.com/Obw7fb
0686デフォルトの名無しさん
2015/01/23(金) 07:48:09.87ID:Y9EkAzUz0687デフォルトの名無しさん
2015/01/23(金) 08:07:09.64ID:QCd9PPlm0688デフォルトの名無しさん
2015/01/23(金) 08:28:11.00ID:V7xGBncr礼が欲しいんじゃなくて、解決したかどうかを書いて欲しいな
答えが合ってかどうかは知りたいところ
0689デフォルトの名無しさん
2015/01/23(金) 08:53:58.46ID:+1SZl8V4賛同1
0690デフォルトの名無しさん
2015/01/23(金) 10:38:20.18ID:u3mMWm3Aだから回答が遅かったりするともう返答できないw
0691デフォルトの名無しさん
2015/01/23(金) 11:31:48.84ID:Y9EkAzUz0692デフォルトの名無しさん
2015/01/23(金) 15:20:40.85ID:UMy8LD5S0693デフォルトの名無しさん
2015/01/23(金) 15:26:10.88ID:Mv61dp+aせいぜいマルチかどうかがすぐにわかるならいいな
#define NULL 0
という処理系もあるそうだから、「NULL はポインタ」と決めうちするのはよくない
そもそも NULL なんて使わずに素直に 0 と書いておけばよい
http://www.kouno.jp/home/c_faq/c5.html#10
0695デフォルトの名無しさん
2015/01/23(金) 21:34:56.14ID:O1ms15xK0696デフォルトの名無しさん
2015/01/23(金) 22:04:26.60ID:22/uje4hミスリード招くこと書くなよ
CのNULLには存在意義あるぞ
0697デフォルトの名無しさん
2015/01/23(金) 22:26:18.17ID:emDRVGKQ0698デフォルトの名無しさん
2015/01/23(金) 22:32:18.46ID:FUl2cYm5execl*() の NULL と 0 は置き換え利くの
0699デフォルトの名無しさん
2015/01/23(金) 22:43:27.99ID:emDRVGKQexecl*() とかの可変長関数や、またプロトタイプを置かず前方参照をやる場合は、0 と書こうが NULL を使おうがシクることには変わりない
そういう意味では「置き換えは効く」
0700デフォルトの名無しさん
2015/01/23(金) 22:50:22.89ID:YOZ8UP4v0701デフォルトの名無しさん
2015/01/23(金) 22:52:34.85ID:rPlMaG+2C++ではnullptrと書く
C++でNULLが好まれないのはs/NULL/0/g で問題があるから
0702デフォルトの名無しさん
2015/01/23(金) 22:54:54.77ID:rPlMaG+2C++でNULLが好まれないのはNULLが (void*)0 でも 0 でも困るからであって、Cの話とは別
0703デフォルトの名無しさん
2015/01/23(金) 22:58:35.48ID:emDRVGKQおう、そのとおりだ、C++ の最近の規格のことは念頭になかった‥オーバーロードに失敗するからねえ
でもこれって C の可変長引数関数と通じるところがあるように思うのだが
0704デフォルトの名無しさん
2015/01/24(土) 00:01:39.66ID:WdkamIE30705デフォルトの名無しさん
2015/01/24(土) 08:20:22.03ID:2NdyhA7KC言語: (void*)0
C++: 0
じゃなかったっけか
C++でvoid*アドレスをvoid*でないポインタに入れるとエラーか何かになるんだよな確か
0706デフォルトの名無しさん
2015/01/24(土) 09:46:17.77ID:7mupMMLaint *pi;
pi = pv; // ng
pi = 0; // ok
pi = 1; // ng
0707デフォルトの名無しさん
2015/01/24(土) 10:19:44.94ID:pFLcOxRmC言語では0。キャストは不要
0708デフォルトの名無しさん
2015/01/24(土) 11:06:08.52ID:6Ll+V+b6引っ込んでろ。初心者。
0709デフォルトの名無しさん
2015/01/24(土) 11:31:50.07ID:lPZWYG3p0710デフォルトの名無しさん
2015/01/24(土) 16:12:56.52ID:louUP+mVそれをmain.cの中で呼び出す場合、コンパイル方法は
$gcc -c main.o
$gcc -c test.c -lm
$gcc main.o test.o
ではダメで
$gcc -c main.o
$gcc -c test.c
$gcc main.o test.o -lm
なのは何故だろう。あと、リンクオプションの位置も変えるとダメなのは? × $gcc -lm ...
0711デフォルトの名無しさん
2015/01/24(土) 16:14:44.07ID:louUP+mV× $gcc -c main.o
○ $gcc -c main.c
0712デフォルトの名無しさん
2015/01/24(土) 17:03:08.51ID:LdIBiv/J-l はリンカーへの指示
位置云々はツール作成者の趣味
0713デフォルトの名無しさん
2015/01/24(土) 17:10:30.33ID:9qZykLIlman gcc
-l library
It makes a difference where in the command you write this option;
the linker searches and processes libraries and object files in the
order they are specified. Thus, foo.o -lz bar.o searches library z
after file foo.o but before bar.o. If bar.o refers to functions in
z, those functions may not be loaded.
0714デフォルトの名無しさん
2015/01/24(土) 18:00:55.45ID:lPZWYG3pgetoptを使ったコマンドとは違う雰囲気でいやんだよねw
getoptも2周目以降に再突入させられるけど。
0715デフォルトの名無しさん
2015/01/24(土) 18:22:04.04ID:louUP+mVありがとうございます。
もっと man を見るよう習慣づけます
0716デフォルトの名無しさん
2015/01/25(日) 22:42:58.52ID:PTRl+LFr自前でPCでプッシュ通知を送り、自前でプッシュ通知を受け取るプログラム考えてますが、やはりwhileなどのループを回しっぱなしで来たかどうかを監視するのが一般的なのでしょうか?
0717デフォルトの名無しさん
2015/01/25(日) 22:48:27.55ID:XPwi6yeCまあselectもタイムアウト付きにしてwhileでループさせるかもしれんけど
0718デフォルトの名無しさん
2015/01/26(月) 01:05:52.65ID:XNIaxWEkいや、自分で自分の select() にデータを突っ込むのは可能なのか?
0719デフォルトの名無しさん
2015/01/26(月) 08:51:33.72ID:DprSVj8N0720デフォルトの名無しさん
2015/01/26(月) 09:08:56.23ID:7PO1Rygt> selectもタイムアウト付きにして
これかな
0721デフォルトの名無しさん
2015/01/26(月) 09:37:06.16ID:2d3/GSRW0722デフォルトの名無しさん
2015/01/26(月) 10:22:42.13ID:+qRVmOKUENGLISH板へ
0723デフォルトの名無しさん
2015/01/26(月) 11:29:46.34ID:2d3/GSRWfor(j = 0; j < 10; j++);
掛け算のプログラムだけど、まず横に計算していくの?
それとも縦?
0724デフォルトの名無しさん
2015/01/26(月) 12:35:42.07ID:WgKUdGET0725デフォルトの名無しさん
2015/01/26(月) 13:13:49.81ID:2d3/GSRW0726デフォルトの名無しさん
2015/01/26(月) 13:37:05.92ID:VzMYjy2e最適化で消える
0727デフォルトの名無しさん
2015/01/26(月) 14:26:28.24ID:dPrzH4GQ消えきらずに i=10 と j=10 の代入になるっぽい?
0728デフォルトの名無しさん
2015/01/26(月) 14:47:01.31ID:+qRVmOKUi = 1 * 10
j = 1 * 10
0729デフォルトの名無しさん
2015/01/26(月) 15:03:24.71ID:272iy6i0そのループ以降i,jが使われるのかどうかによる
0730デフォルトの名無しさん
2015/01/26(月) 15:08:51.91ID:dPrzH4GQた、たしかに、、、
0731デフォルトの名無しさん
2015/01/26(月) 17:06:28.40ID:Bwdxh3xY0732デフォルトの名無しさん
2015/01/28(水) 08:09:03.20ID:jpn19UCt0733デフォルトの名無しさん
2015/01/28(水) 09:23:39.03ID:nPDXZ+720734デフォルトの名無しさん
2015/01/28(水) 10:02:18.44ID:fH6YMCDVp1 = str + strlen(str)-1 //末尾を指す
最初のstrって、なんで必要なんですか?
0735デフォルトの名無しさん
2015/01/28(水) 10:03:12.54ID:rr6Q00cW無理だから引数としてサイズも渡す。
0736デフォルトの名無しさん
2015/01/28(水) 10:06:49.20ID:rr6Q00cWというよりかは文全体の意味がわかってないんじゃないか?
p1に代入しているstrは配列の先頭を示すポインタ。
strlen(str)-1はstrの先頭からの最後の文字の位置。
0737デフォルトの名無しさん
2015/01/28(水) 10:17:46.75ID:VpMZP1Yichar* p1 = str + strlen(str)-1; としておいて使うときには *p1 もしくは p1[0]
0738デフォルトの名無しさん
2015/01/28(水) 10:58:47.23ID:g/K+Ovy5仮に、str配列の先頭アドレスを、100とすると、
(配列名は、先頭要素のアドレスと同じ)
str=str[0]='h':100
e:101,l:102,l:103,o:104,NUL:105
strlen(str)=5
100+5-1=104 :o
0739デフォルトの名無しさん
2015/01/28(水) 12:15:17.49ID:zjrEJgS/無理なのか
main関数の配列と引数の配列って何が違うのでしょう
0740デフォルトの名無しさん
2015/01/28(水) 12:36:35.89ID:hX+LB9Wpmain関数の配列と引数の配列
とは何を指しているのでしょう?
0741デフォルトの名無しさん
2015/01/28(水) 12:39:07.26ID:Tyuplfcx関数で引き渡すのは配列の先頭位置だけ
宣言した配列のコンパイル作業と配列を受け取る冠すのコンパイルが別だと、そのままでは配列の個数の渡しようがないから自分でプログラムの上で渡すしかない
0742デフォルトの名無しさん
2015/01/28(水) 13:29:24.37ID:rr6Q00cW呼び出し規約のせいで本来の配列は渡せない。
渡せているのはポインタ。
0743デフォルトの名無しさん
2015/01/28(水) 14:03:58.64ID:fH6YMCDVありがとうございます
0744デフォルトの名無しさん
2015/01/28(水) 16:00:57.30ID:VpMZP1Yi多分
同一スコープ内だと sizeof とると大きさになるのに
引数として受け取ったのは sizeof とるとだめなのはなんで?
という意図だろう
固定した大きさであれば 構造体で繰るんでオケだけども
struct foo { int a[100]; };
void func( strcut foo* p)
{
size_t sz = sizeof p->a;
.....
}
任意の大きさには対応できない。
あくまで、sizeof で知ることが出来る値は、
「実行時ではなく、コンパイル時に大きさが確定するもの」なんだよね
0745デフォルトの名無しさん
2015/01/28(水) 16:14:10.75ID:tXdxZo2L0746デフォルトの名無しさん
2015/01/29(木) 11:24:25.39ID:oB9UXWjJ多分エスパーが必要になる
PIC(16f系)で交流の信号をAD変換してデジタル信号にしたいんだ
以前に直流信号では成功してて、そこからプログラムを弄って、
CPUから定期的に信号を取りに行くようにすれば良いらしいんだけど、
そこをどうやって書くかわからん
とりあえずプログラム http://www.dotup.org/uploda/www.dotup.org132781.txt.html
0747デフォルトの名無しさん
2015/01/29(木) 11:55:52.39ID:QiY6CRdb交流電源の電圧の実効値をとりたい?
0748デフォルトの名無しさん
2015/01/29(木) 13:11:24.80ID:oB9UXWjJ実行値取る予定はないけど、AD変換の過程で必要になるなら取りたいと思う
交流信号というか、0〜5Vのサイン波かな
0749デフォルトの名無しさん
2015/01/29(木) 13:29:28.37ID:zGbE6mz9サイン波でいいってことは極端に言えば [1,0,1,2,1,0,1,2] みたいに取れればいいってこと?
それなら直流信号で成功したのそのままでいいんじゃない
プログラムでやることはADコンバータのレジスタを読むことだけだしそれはもうやってるっぽい
0750デフォルトの名無しさん
2015/01/29(木) 13:37:25.55ID:QiY6CRdb流石にそこまでエスパーできる人はいないだろう。
0751デフォルトの名無しさん
2015/01/29(木) 14:01:50.63ID:4Rp6hoR20752デフォルトの名無しさん
2015/01/29(木) 14:03:24.31ID:4Rp6hoR20753デフォルトの名無しさん
2015/01/29(木) 14:20:13.35ID:4Rp6hoR2だがこれ読んでも何一つ分からんw
せいぜい adconv()が返す unsigned int(32bit?) 値を char(8bit) への変換かな
最大5V ==> 255, 最小 0V ==> 0 みたいに定義して比率で置き換える
それ以上はエスパーでは無理
0754デフォルトの名無しさん
2015/01/29(木) 16:12:24.93ID:/eP3JLu10755デフォルトの名無しさん
2015/01/29(木) 16:15:53.83ID:ZEewO4sk0756>>746
2015/01/29(木) 17:03:47.71ID:oB9UXWjJ自分でも何言ってるかわかんなくなってきたわ
もう一回考えをまとめまつ
0757デフォルトの名無しさん
2015/01/29(木) 18:29:16.84ID:+8ZEFoCxそのコードだとサンプリング周期が10ms毎っぽいから、
取り込める信号の最高周波数は50Hz程度が限界だけど問題ないの?
0758デフォルトの名無しさん
2015/01/29(木) 18:45:12.03ID:VTa1G/DYシリアル通信かなんかで、ADコンバータ側の値をもらってくる
ってんなら、通信レートがボトルネックになるんじゃねーの?
(10ms 未満で送受信が完了するんなら サンプリングレートは 10ms ぐらい って言えるけども
0759デフォルトの名無しさん
2015/01/29(木) 19:02:08.96ID:+8ZEFoCx外部にシリアルで送りたいんじゃないの?
設定通り19200bpsのボーレートなら通信に関しては10msで充分余裕がある。
0760デフォルトの名無しさん
2015/01/29(木) 19:07:50.67ID:nqg27VEbシリアルで外にデータを送っているが、それは何のためなのか
0761>>746
2015/01/30(金) 00:20:07.88ID:n97ti0lcサンプリングレート(ディレイ?)については最大値を探れとのことで
明日もう一回詳しいことを確認する予定
0762デフォルトの名無しさん
2015/01/30(金) 10:57:11.54ID:hLjQtDl/char *str;
str = func();
printf("%s",str);
return 0;
}
char* func() {
return "kitty on your lap";
}
戻り値と引数って、どれですか?
0763デフォルトの名無しさん
2015/01/30(金) 12:24:30.22ID:BNtp6MqMCなんか止めとけ 教える方も教わる方も時間のムダ
と切って捨てるしか無い
0764デフォルトの名無しさん
2015/01/30(金) 12:43:48.51ID:glbel8Mi戻り値 = 関数 ( 引数... )
大雑把に書くとこう
0765デフォルトの名無しさん
2015/01/30(金) 13:01:19.98ID:wRwoyNay0766デフォルトの名無しさん
2015/01/30(金) 13:24:10.63ID:tOjiC4H9工学科はやらんと思うが情報系はやると思う。
0767デフォルトの名無しさん
2015/01/30(金) 14:11:21.16ID:hLjQtDl/if(fseek(fp, loc*sizeof(dpuble), SEEK_SET);
scanfで値を変えたらどうなるんですか?
0768デフォルトの名無しさん
2015/01/30(金) 14:15:59.90ID:hVjevdcMコンパイルエラー
0769デフォルトの名無しさん
2015/01/30(金) 15:27:29.83ID:R6bULBBX0770デフォルトの名無しさん
2015/01/30(金) 15:40:53.28ID:hLjQtDl/0771デフォルトの名無しさん
2015/01/30(金) 16:09:53.11ID:6p+AukVf0772デフォルトの名無しさん
2015/01/30(金) 17:19:22.90ID:/VXTf8yHfor内の *pointer[i] = (int *)malloc(sizeof(int) * YOKO); を抜いたら動くので、ここが怪しいと思ってますが、私の見た限りではどこが悪いのか分かりませんので、どなたかご助言をお願いします。
#include <stdio.h>
#include <malloc.h>
#define TATE 3
#define YOKO 5
void kakuho(int ***pointer){
int i;
*pointer = (int**)malloc(sizeof(int *) * TATE);
for(i=0;i<TATE;i++){
*pointer[i] = (int *)malloc(sizeof(int) * YOKO);
}
return;
}
int main(void) {
int **p;
kakuho(&p);
printf("Finish\n");
return 0;
}
0773デフォルトの名無しさん
2015/01/30(金) 17:21:57.01ID:UnBDdYg/それくらいでつまずくなら、ぼちぼちポインタ使って慣れてから再検証する。
0774デフォルトの名無しさん
2015/01/30(金) 17:29:28.58ID:UnBDdYg/vector< vector<int> > p( TATE, vector<int>(YOKO) );
リサイズは p.resize(2*TATE); やp[0].resize(YOKO+10); など。
0775デフォルトの名無しさん
2015/01/30(金) 17:36:58.17ID:S7lOnqCz0776デフォルトの名無しさん
2015/01/30(金) 17:38:31.44ID:/VXTf8yHSTL vector...調べてみたらC++のライブラリ?みたいですね
もし、STLvectorを使っても、C系を扱っているといずれポインタは出てくるので、この機会に理解を深めたいと思い質問しました。
どこが悪いのかお教えいただけますでしょうか?
0777デフォルトの名無しさん
2015/01/30(金) 17:40:17.79ID:61zbFarY0778デフォルトの名無しさん
2015/01/30(金) 17:43:42.53ID:/VXTf8yH計算順序でしたか!
相当初歩的な事を・・・
面倒で、全ては覚えていませんでしたが、この機会に覚えようと思います。
ありがとうございました。
0779デフォルトの名無しさん
2015/01/30(金) 17:44:19.82ID:hFayybhW勉強頑張ってね
ポインタも自分でいろいろいじってるうちにすぐ理解できるから
0780デフォルトの名無しさん
2015/01/30(金) 18:00:53.92ID:vIUweOgIパスによってメモリの取り方が違ったりするのものなんでしょうか?
パスの違いが影響することなんてあるわけないと思ってました・・・
0781デフォルトの名無しさん
2015/01/30(金) 18:17:12.59ID:X02ag5jjというのは置いておくと
printf("%s",argv[0]);でわかるように
mainの引数であるargvには実行時のコマンドが文字列として渡されるわけで
その長さが違うことによってなんらかの違いはでるでしょうね
0782デフォルトの名無しさん
2015/01/30(金) 19:12:48.90ID:exnE3lvA0783デフォルトの名無しさん
2015/01/30(金) 19:24:54.01ID:vIUweOgIなるほど
仰る通り意味はないことは承知ですが、何度実行しても再現性があったので、何かあるのかと思ってしまいました
argvがあるので、両者は必ずしも等価な結果になるとは限らないと分かっただけで良かったです
ありがとうございました
0784デフォルトの名無しさん
2015/01/30(金) 19:57:51.91ID:R6bULBBX転ばぬ先のぬるぽチェック
0785デフォルトの名無しさん
2015/01/30(金) 20:29:59.01ID:C+r/cEaVド素人は引っ込んでなよ。
これでは、argv, argv[0]の指している先がスタックにある事を何も示していない。
0786デフォルトの名無しさん
2015/01/30(金) 22:41:12.81ID:rJFIS397送り先のプロセス内では受け取ったポインタのアドレス値は
もはや無意味なデータになっちゃうんだな
今日仕事でえらい恥かいちゃったわw
0787デフォルトの名無しさん
2015/01/30(金) 22:50:03.05ID:xE7xovrP0788デフォルトの名無しさん
2015/01/30(金) 23:51:58.73ID:Ofydkxe6何のためのプロセスだよ。それならスレッドでいいじゃん
0789デフォルトの名無しさん
2015/01/31(土) 07:30:39.74ID:20MrPVIm0790デフォルトの名無しさん
2015/01/31(土) 11:08:10.43ID:NVotuPvn組み込み系って一言で言われてもなぁ
0791デフォルトの名無しさん
2015/01/31(土) 21:54:24.63ID:Eae2x+oNは解決できたんだろうか?
やはり途中経過はほしいな
0792デフォルトの名無しさん
2015/02/02(月) 14:01:40.18ID:8AyVYO21(*p)(int a, int b)
これであってるの?
0793デフォルトの名無しさん
2015/02/02(月) 14:07:01.40ID:An/kZWGD0794デフォルトの名無しさん
2015/02/02(月) 14:55:54.19ID:8AyVYO21他には?
0795デフォルトの名無しさん
2015/02/02(月) 15:34:44.89ID:vwaX8FNQ0796デフォルトの名無しさん
2015/02/02(月) 17:06:41.70ID:3TuwLbgE工学部でも普通にやるわ
むしろハード寄りの工学部こそやる
古い言語だろうが考え方を学ぶ教育上の重要性は変わらん
0798デフォルトの名無しさん
2015/02/02(月) 18:58:04.14ID:BTw9Mjmbポインタの考え方は変わらんよ。
最近の言語は表面上を隠蔽してるだけで、根本的なところを理解するにはC言語やるのが結局は近道だよ。
0799デフォルトの名無しさん
2015/02/02(月) 19:21:47.34ID:vwaX8FNQ0800デフォルトの名無しさん
2015/02/02(月) 21:21:20.66ID:Kg0DUTewマイコンも弄れない工学部とかないわ
0801デフォルトの名無しさん
2015/02/02(月) 21:24:56.20ID:Ce/01Ztg0802デフォルトの名無しさん
2015/02/02(月) 23:08:15.29ID:FzJmJvBa> マイコンも弄れない工学部とかないわ
高卒の君は知らないだろうが、世の中には工学部金属工学科とか工学部応用科学科なんて学科もあったりするので、全員がマイコン弄るわけじゃないよ
パソコンならわかるけど
0803デフォルトの名無しさん
2015/02/02(月) 23:45:32.76ID:rLP+hAQU0804デフォルトの名無しさん
2015/02/03(火) 00:02:12.37ID:UeLVCsE80805デフォルトの名無しさん
2015/02/03(火) 00:27:35.82ID:Qzp7B0o10806デフォルトの名無しさん
2015/02/03(火) 05:26:24.60ID:KBqqkrL/中身作るところまではやらなくてもいいかもですが
0807デフォルトの名無しさん
2015/02/03(火) 07:13:01.43ID:Ak6uoSi3w
0808デフォルトの名無しさん
2015/02/03(火) 07:44:10.01ID:9S3xfl3n0809デフォルトの名無しさん
2015/02/03(火) 11:22:45.25ID:RogaT2hh0810デフォルトの名無しさん
2015/02/03(火) 11:39:08.68ID:BOhQBBy+0811デフォルトの名無しさん
2015/02/03(火) 11:40:32.50ID:0TkOOfFT0812デフォルトの名無しさん
2015/02/03(火) 12:32:01.94ID:yGwE0+2u0813デフォルトの名無しさん
2015/02/03(火) 12:48:27.37ID:ABhgh/ML純粋数学は哲学に通じるものがあるけど、応用数学はただの道具。
プログラム言語も言語理論とか言い出すと哲学的になるし、コーディングの話だとただの道具の使い方。
0814デフォルトの名無しさん
2015/02/03(火) 14:59:04.09ID:9S3xfl3n0815デフォルトの名無しさん
2015/02/03(火) 22:46:50.05ID:ftxttBUjfunc()の戻り値は文字列定数の先頭のポインタ
0816デフォルトの名無しさん
2015/02/04(水) 18:50:43.86ID:xx4bjisy0817デフォルトの名無しさん
2015/02/04(水) 22:46:42.25ID:qnkRMru3目から鱗で一気に世界が変わったなあ。
現実世界の実数の世界の裏に、途方もない世界が広がっていることを知って衝撃を受けた。
哲学とまでは言わないが、ただの道具でも世界観を変えるには充分すぎる。
0818デフォルトの名無しさん
2015/02/04(水) 23:00:14.84ID:3h7Zr70+2次元の回転で三角関数が出てくるのと同様では?
虚数が仮の数で1次元だった実数を2次元へ拡張したようなもので
2次元平面と似てるのは当然では。
0819デフォルトの名無しさん
2015/02/04(水) 23:13:03.02ID:+oYTJ+WR2次元や3次元の座標変換や写像を扱うのにも三角関数は使うが、実数の範囲の話。
複素関数の範囲まで含めると、フーリエ変換やラプラス変換を通して、
時間と周波数の世界、複素s空間の世界まで視野が広がる。
0820デフォルトの名無しさん
2015/02/04(水) 23:20:19.13ID:3h7Zr70+四元数(クォータニオン)は複素数を拡張した数体系。
四元数についての最初の記述は、1843年に数学者ウィリアム・ローワン・ハミルトンによってなされ、三次元空間の力学に応用された。
四元数は応用数学、特に3Dグラフィクスやコンピュータビジョンにおいて三次元での回転の計算でも用いられる。
現代数学的な言い方をすれば、四元数の全体は実数体上四次元の結合的ノルム多元体を成す。四元数は最初に発見された非可換多元体。
フロベニウスの定理に従えば、四元数は実数を真の部分環として含む有限次元可除環の二種類しかないうちの一つ(もう一つは複素数の全体)。
従って、単位四元数は三次元球面上の群構造を選んだものとして考えることができて、群Spin(3)を与える。
これは SU(2) に同型、あるいはまた SO(3) の普遍被覆に同型である。
四元数 - Wikipedia
0821デフォルトの名無しさん
2015/02/04(水) 23:27:15.15ID:+oYTJ+WR四元数はもっと注目されてもいいと思うんだけど、いまひとつマイナーな存在なんだよなあ。
0822デフォルトの名無しさん
2015/02/04(水) 23:40:42.88ID:3h7Zr70+多元体 - Wikipedia
結合的多元体
よく知られる結合的な多元体の例は有限次元実多元体である。
フロベニウスの定理によれば、そのような多元体は同型の違いを除いて三種類、実数体(一次元)・複素数体(二次元)、四元数体(四次元)しかない。
非結合的多元体
実数体上で有限次元の可換単位的多元体は同型を除いてちょうど二つだけ存在する(それは実数体と複素数体で、いずれも結合的)。
実は、任意の有限次元可換実多元体の次元は 1 か 2 のいずれかであることが1940年に証明されており、ハインツ・ホップに因んでホップの定理と呼ばれる。
可換性の仮定を落とすことで、ホップは自身の結果を拡張し「任意の有限次元実多元体の次元は2の冪でなければならない」ということを示した。
さらに後に示された事実として、任意の有限次元実多元体の次元は 1, 2, 4, 8 のいずれかでなければならないことが分かっている。
この事実は、ミシェル・ケルヴェアとジョン・ミルナーによってそれぞれ独立に1958年に証明された。これは代数的位相幾何学、特に K-理論を用いるものである。
0823デフォルトの名無しさん
2015/02/04(水) 23:51:21.64ID:+oYTJ+WR古典的な微分幾何学の数学からは生まれてこなくても仕方ない。
0824デフォルトの名無しさん
2015/02/05(木) 00:33:26.91ID:FrAPSRmI>こういった複素数の特徴や、それが1958年まで知られてなかったことが凄い。
1958年って、Lisp誕生の年だな。
0825デフォルトの名無しさん
2015/02/05(木) 02:46:43.97ID:jgxo7Fem応用数学の立場としては、四元数をどう使うかの方が大事なのだから。
難しいこと考えなくても、基底の基本演算さえ理解すれば、後はただの行列演算に落とし込めるだろ。
上手く使えば、平行移動と回転についての複数の演算を大幅に簡単化できる。
厳密な理論より目前の課題への応用。
プログラムを組むなら数学の知識はそのために使うべき。
0826デフォルトの名無しさん
2015/02/05(木) 05:12:43.35ID:Iop/4SxL0827デフォルトの名無しさん
2015/02/05(木) 07:43:56.26ID:Q9uPwcn4正直言って、過去にチャレンジして挫折した。
今は3次元データは、4次元同次座標で扱うことで凌いでいる状況…orz
このスレ見て、久しぶりに昔を思い出した。
0828デフォルトの名無しさん
2015/02/05(木) 16:55:39.16ID:DRERuoEj{
const char *p;
for (p = str; *p != '\0'; p++) ;
return p - str;
}
最後の p - str って、どういう意味?
return p じゃダメなの?
0829デフォルトの名無しさん
2015/02/05(木) 16:59:00.79ID:Omd6cUWA文字列の長さを返すから
先頭アドレスstrと最後のアドレスを仮に
100と108とすると、108 - 100で8を返すような動き
0830デフォルトの名無しさん
2015/02/06(金) 12:26:53.51ID:9d0A7+MO108を\0とすると、意味ないんじゃ・・・
0831デフォルトの名無しさん
2015/02/06(金) 12:37:21.56ID:b3gwE4qm地の言葉を使いたまえ、君に合わせよう
0832デフォルトの名無しさん
2015/02/06(金) 16:33:48.92ID:bwSv1Q/2それは*p
これで分からなかったらもう一度質問。
0833デフォルトの名無しさん
2015/02/06(金) 16:44:33.18ID:WgeZDeZC0834デフォルトの名無しさん
2015/02/06(金) 18:47:49.82ID:b3gwE4qmhttp://codepad.org/O8hSJfpt
地の言葉を使いたまえ、君にあわせよう
0835デフォルトの名無しさん
2015/02/06(金) 19:22:02.17ID:7NzHbLJDまったくもって違う
strlenは'\0'までのバイト数/sizeof(char)
wsclenはL'\0'までのバイト数/sizeof(wchar_t)
0836デフォルトの名無しさん
2015/02/06(金) 20:00:09.41ID:oDLDeQ3Dなおさら分からんと思た
0837デフォルトの名無しさん
2015/02/06(金) 20:16:46.87ID:/6bGvltOそんな訳ないだろう。
あまり詳しくは知らないが、単純なベクトル演算とかはニュートンやライプニッツの時代からあるだろう。
17〜18世紀頃から使われていたはず。
逆にベクトルの概念を使わずに、運動方程式とか表現できたらその方がびっくりだわ。
0838デフォルトの名無しさん
2015/02/06(金) 23:38:38.74ID:ocZrWIDp一体どういう思考を経てその結論に達したのかが分からない。
四元数が先に発見されたとか、そんな話あったか?
0839デフォルトの名無しさん
2015/02/07(土) 01:40:44.89ID:KcqvBRci0840デフォルトの名無しさん
2015/02/07(土) 17:41:22.56ID:2hPWt1rlそれのC言語実装とかの話なら分かるんだが
0841デフォルトの名無しさん
2015/02/08(日) 06:41:39.25ID:lwCu/p08ちょっと前のC言語の質問にしても、初心者を小馬鹿にしたような悪意のあるレスの書き込みが目立つだろ
スレの雰囲気が悪すぎる
0842デフォルトの名無しさん
2015/02/08(日) 07:08:19.21ID:GJF/AvuKドヤ顔で自己満足に浸っているのも質が悪いな。
初心者には内容が理解できないだろ。
後、質問者も理解できたのか出来ないのか、返答くらいはするべきだろう
と思うがな。
0843デフォルトの名無しさん
2015/02/08(日) 10:10:55.72ID:he2fHwkq0844デフォルトの名無しさん
2015/02/08(日) 10:24:50.79ID:WLLuhFHT質問者がいなけりゃネタなくていいだろ
0845デフォルトの名無しさん
2015/02/08(日) 10:26:24.64ID:jgXa3G6y0846デフォルトの名無しさん
2015/02/08(日) 10:33:59.06ID:LtHLQMWIだが、extern と static は居ないと困る。
0847デフォルトの名無しさん
2015/02/08(日) 10:38:49.08ID:0Aue6GB70848デフォルトの名無しさん
2015/02/08(日) 10:49:00.16ID:9/BLTlkq組み込み系とかだとpragmaで指定できる処理系もあるけど、一般的には無理じゃないかな
0849デフォルトの名無しさん
2015/02/08(日) 10:52:43.51ID:jgXa3G6yextern を 1 ワードも書かずにすませることは可能
0850デフォルトの名無しさん
2015/02/08(日) 11:23:23.18ID:gnj7uFi4グローバル変数やgoto文は、できる限り使わずにすませるよう努めるべきではある。
ただ、そのために必要以上に処理が複雑で保守しにくいものになっては本末転倒。
クラスや例外が言語仕様として用意されていないC言語の場合、
extern を要らない子扱いにするのはちょっと厳しい。
0851デフォルトの名無しさん
2015/02/08(日) 11:40:39.93ID:oGPjhZSclongを1ワードも書かずに済ませる事も可能だし、
doubleを1ワードも書かずに済ませる事も可能だな。
それが何か?
0852デフォルトの名無しさん
2015/02/08(日) 12:12:16.67ID:jgXa3G6yextern を 1ワードを使わずに、しかし分割コンパイル&リンクすることは可能だね
すなわち、既存のプロジェクトにて extern を 1 ワードも使わずに書き直すことは可能だ
0853デフォルトの名無しさん
2015/02/08(日) 12:39:35.96ID:2tYJKyjd0854デフォルトの名無しさん
2015/02/08(日) 12:46:00.73ID:yX+sD18Oある程度の規模のプログラム組んだことがあるなら、それが如何に無謀な努力か分かるだろ。
一から設計するならともかく、既存のプロジェクトを書き直すとか正気か?
0855デフォルトの名無しさん
2015/02/08(日) 12:49:39.52ID:e4rj0+Rn可能だという事で何でも許したら、
支出額にincomeなんて変数名使う奴が必ず出てくる
0856デフォルトの名無しさん
2015/02/08(日) 12:50:10.25ID:JKFx7boSなんでそういうことをしたいんですか?
0857デフォルトの名無しさん
2015/02/08(日) 13:17:34.87ID:yX+sD18O本人ではないが横レス。
例えば、組み込み系の場合、特に特定の処理で限定的に処理速度を稼ぎたい場合(ループ内の演算など)
インラインアセンブラを使用してアセンブリ言語で記述する。
この場合、コンパイラに勝手にCPUのレジスタを使われては困る。
そのため、ローカル変数はスタックを使うものとレジスタを使うものを予め指定しておく必要がある。
そこで、上の方のレスにもあるが、#pragmaプリプロセッサディレクティブを使って変数の割当てを指定する。
一般に、組み込み系のpragmaは、register や volatile より強力な支配力を持っている。
0859デフォルトの名無しさん
2015/02/08(日) 13:33:23.70ID:WLLuhFHT/* Standard streams. */
extern struct _IO_FILE *stdin; /* Standard input stream. */
extern struct _IO_FILE *stdout; /* Standard output stream. */
extern struct _IO_FILE *stderr; /* Standard error output stream. */
/* C89/C99 say they're macros. Make them happy. */
#define stdin stdin
#define stdout stdout
#define stderr stderr
0860デフォルトの名無しさん
2015/02/08(日) 13:50:35.39ID:4qLWMDw1#define stdout stdout
#define stderr stderr
↑これって何してんの??
*stdin2みたいなんを準備してみたとき
#define stdin stdin2
に差し替えやすくするためにあらかじめ書いてんの?
0861デフォルトの名無しさん
2015/02/08(日) 14:14:23.15ID:phJldef5コメントすら読めないのかよ。
「C89/C99はこれらをマクロとして宣言している。お気に召すようにしてやる。」って書いてあるだろ。
0862デフォルトの名無しさん
2015/02/08(日) 14:48:52.65ID:jgXa3G6y既存のプロジェクトでも可能であるというだけであり、
既存のプロジェクトを書き直せと主張しているわけではない
extern が冗長であることを指摘できれば十分だ
0863デフォルトの名無しさん
2015/02/08(日) 14:49:39.03ID:jgXa3G6yC では extern は使う必要はない
0864デフォルトの名無しさん
2015/02/08(日) 14:55:25.42ID:e4rj0+Rn0865デフォルトの名無しさん
2015/02/08(日) 14:58:43.60ID:jgXa3G6yお前はどうつかっている?
0866857
2015/02/08(日) 15:19:29.91ID:2x2AjuBP何故そんな極端な思考に走るんだ。
冗長であることと不要であることは等価ではないぞ。
冗長であってもメリットがあれば使えばいい。
下手に、引数と戻り値が連鎖しまくった解読困難な迷路のようなモジュール構造とするくらいなら
グローバル変数と外部宣言を使った方が遥かに見通しが良くなる場合もある。
使いどころを見極めれば、extern不要とかあり得んだろ。
0867デフォルトの名無しさん
2015/02/08(日) 15:21:30.01ID:jgXa3G6yグローバル変数は必要に応じて使う立場だ、しかし extern はその場合でも不要
0868デフォルトの名無しさん
2015/02/08(日) 15:21:43.90ID:WLLuhFHT逆に聞くけど、お前が標準ライブラリを実装するとしたらstdinはどう書くつもりなんだ?
VCみたいなキモい書き方するつもりか?
0869デフォルトの名無しさん
2015/02/08(日) 15:25:39.47ID:jgXa3G6y>>859 の extern をばっさり削除して無問題
0870デフォルトの名無しさん
2015/02/08(日) 15:39:16.03ID:e6wj3tusexternを使わない代償として変数宣言のヘッダーファイルに相当複雑なマクロ仕込んでるな
多重インクルード防止とインクルード順の管理、ダミーの変数宣言とその解放処理…
余計に面倒臭くないか?
0871デフォルトの名無しさん
2015/02/08(日) 15:40:43.41ID:jgXa3G6yいや、マクロを必要としない
>>859 のような extern はばっさり削って問題ない、ただそれだけだ、ただしこれは C の話で C++ ではだめだ
0872デフォルトの名無しさん
2015/02/08(日) 16:33:31.07ID:L/vZKsRK0873デフォルトの名無しさん
2015/02/08(日) 17:37:05.24ID:/BdWTHaM出来ねーよ。Qzとかいうアホウも同じことほざいてたな。
libhoge.a:
hoge.o
hoge.c:
int hoge[10000];
hoge.h
extern int hoge[10000];
externがないとhoge.hをインクルードしただけで、hogeの領域が
確保されてしまうわけだが。
0874デフォルトの名無しさん
2015/02/08(日) 17:53:40.49ID:WLLuhFHTそう考えると確かにいらないっちゃいらない事が多いけな。
でも、例えば文字列の配列をどこかのソースで定義する場合、そのソースをコンパイルしたオブジェクトをリンクし忘れたとすると、ヘッダでexternつけて宣言していない場合勝手にリンカが変数の領域を確保してしまうわけだ。
すると、何らかの文字列が入っているはずの文字配列が、なぜかヌル文字で埋められたものになっているなんてことになりかねない
0875デフォルトの名無しさん
2015/02/08(日) 17:55:31.60ID:jgXa3G6y本当に確保されるのか?
初期化されない変数はふつう BSS 領域に入るのでオブジェクトファイルのサイズは増えない
たとえ確保されたにしても、リンク時にまとめられる、遅かれ早かれその h[10000] は必要なんだろう?
初期化をローダにまかせずに記述するようにすれば、君の hoge.c には h の定義すら必要ない
0876デフォルトの名無しさん
2015/02/08(日) 17:58:59.21ID:jgXa3G6y共通のグローバル変数はヘッダに書くようにすればよい
これは定義ではなくて仮定義だから、慣れれば抵抗はない、無論オブジェクトファイルサイズも増えない
初期化をローダにまかせず、記述するようになるからお行儀もよくなる
グローバル変数を消極的にスコーピングできるようになる
欠点は、この手法はオブジェクトファイルとリンカ依存であることw
0877デフォルトの名無しさん
2015/02/08(日) 18:00:23.38ID:phJldef50878デフォルトの名無しさん
2015/02/08(日) 18:09:13.19ID:jgXa3G6y残念ながら仮定義というやつだ、gcc 拡張ではない
0879デフォルトの名無しさん
2015/02/08(日) 18:12:31.74ID:WLLuhFHT俺もさっきまで勘違いしてたんだが、-pedantic-errors付けてもこれは通る。
http://melpon.org/wandbox/permlink/LCE81Q3GGE520jPh
ただし、それでもextern使った方がいいと思う
exten使わない場合
hoge.c:
const char* hoge = "hoge";
hoge.h:
const char* hoge;
main.c:
#include <stdio.h>
int main() { printf("%s\n", hoge); }
# gcc main.c -lhoge
# ./a.out
hoge
# gcc main.c
# ./a.out
libhoge.aをリンクし忘れ、hogeがヌルポインタなので未定義動作。エラー終了するかもしれない
externを付ける
hoge.h:
extern const char* hoge;
# gcc main.c
hogeがの定義が見つからないのでリンカエラー。libhoge.aをリンクし忘れていることが分かる
0880デフォルトの名無しさん
2015/02/08(日) 18:15:32.73ID:WLLuhFHT#include <stdio.h>
#include "hoge.h"
int main() { printf("%s\n", hoge); }
だわ
0881デフォルトの名無しさん
2015/02/08(日) 18:19:13.07ID:jgXa3G6yたしかにライブラリ .lib, .a あるいは .so に添付するヘッダに関しては extern をつけたほうがいいかもしれない
無論、ライブラリたるもの、グローバル変数を持つのは避けたいものだね
0882デフォルトの名無しさん
2015/02/08(日) 18:21:18.39ID:phJldef5そらそうよ。リンカの仕事だから。
0883デフォルトの名無しさん
2015/02/08(日) 18:48:04.56ID:jgXa3G6ygnu 拡張だと思った理由は?
0884デフォルトの名無しさん
2015/02/08(日) 19:49:46.61ID:/BdWTHaM> 本当に確保されるのか?
当たり前だ、アホウ。
> たとえ確保されたにしても、リンク時にまとめられる、遅かれ早かれその h[10000] は必要なんだろう?
参照しなけりゃ不要だ。アホウ。
お前、あの時から未だに理解してないのか。wwww
えいっ
system("ls -l ./prog"); wwww
0885デフォルトの名無しさん
2015/02/08(日) 20:13:34.60ID:/BdWTHaMちなみに、プログラムのサイズはls -lじゃなくてsizeで見るんだよ。wwww
hoge.h:
#ifdef QZ
int hoge[10000];
#else
extern int hoge[10000];
#endif
extern int hage(void);
hoge.c:
#include "hoge.h"
int hoge[10000];
hage.c:
#include "hoge.h"
int hage(void) { return 0; }
main.c:
#include "hoge.h"
int main(int argc, char **argv){ return hage(); }
0886デフォルトの名無しさん
2015/02/08(日) 20:14:29.53ID:/BdWTHaM$ ar cr libhoge.a hoge.o hage.o
$ cc main.c -L. -lhoge
$ size a.out
text data bss dec hex filename
1187 552 8 1747 6d3 a.out
$ rm *.[ao]
$ cc -c -DQZ hoge.c hage.c
$ ar cr libhoge.a hoge.o hage.o
$ cc -DQZ main.c -L. -lhoge
$ size a.out
text data bss dec hex filename
1187 552 40064 41803 a34b a.out
0887デフォルトの名無しさん
2015/02/08(日) 21:36:13.41ID:Z5I8sNs20888デフォルトの名無しさん
2015/02/08(日) 21:46:34.01ID:dodlVyA9正常系と異常系に明確に処理を分離する設計が大前提だが…
0889デフォルトの名無しさん
2015/02/08(日) 21:47:58.33ID:0Aue6GB7gotoを使えない奴って、Cを使えない奴と同義語だよね?(´・ω・`)
0890デフォルトの名無しさん
2015/02/08(日) 22:03:34.41ID:dfaBeDkWCにできてC++はできないことある?その逆はありそうだけど
0891デフォルトの名無しさん
2015/02/08(日) 22:09:10.44ID:qm5Q9UjT0892デフォルトの名無しさん
2015/02/08(日) 22:12:00.03ID:zA4VCWHnnew とか delete とか
0893デフォルトの名無しさん
2015/02/08(日) 22:34:47.54ID:0DBFwuJAリソースの貧弱な環境でもそれなりに軽快な動作が期待できること。
OSすら搭載していない程にCPUパワーやメモリ容量の制約が厳しい組み込み系ではほぼC言語一択。
0894デフォルトの名無しさん
2015/02/08(日) 22:55:24.54ID:c5AH8EK3コンパイラがあればの話だけど。
0895デフォルトの名無しさん
2015/02/08(日) 22:58:24.63ID:sDEInvQOC言語と言っても、皆gccやVC++とか
のC++処理系使っているんじゃないの?
0896デフォルトの名無しさん
2015/02/08(日) 23:11:31.40ID:jgXa3G6y>ネタで言ってるんだと思ってた。
ちっ、ライブラリアンを持ち出してくるとは
この場合、使わない(リンクしない)外部名を削除できないか‥まあ前回みているが‥
extern は要らない子ぉ!
0897デフォルトの名無しさん
2015/02/09(月) 00:44:01.06ID:AazwEOnB0899デフォルトの名無しさん
2015/02/09(月) 01:47:16.62ID:oFXCK2gH各メーカー製のCコンパイラがある
0900デフォルトの名無しさん
2015/02/09(月) 01:50:08.88ID:oFXCK2gHZ80 Development Tools
http://www.x1center.org/devtool.html
0901デフォルトの名無しさん
2015/02/09(月) 03:18:37.01ID:yfa27kPw実用するには無理があるだろう。
現在、組み込み以外で8/16bitCPUとか使う状況はないのでは?
逆に組み込み系チップを製造しているメーカは自社製品用のCコンパイラを提供しているだろうが…
0902デフォルトの名無しさん
2015/02/09(月) 09:23:16.83ID:RDXDFFuM::::::::::::::
aaa.c
::::::::::::::
main()
{
extern int my_errno;
func();
printf("myerr=%d\n", my_errno);
}
::::::::::::::
bbb.c
::::::::::::::
int my_errno;
func()
{
my_errno = 3;
}
0903デフォルトの名無しさん
2015/02/09(月) 09:30:23.68ID:fPRadUBa(スコープの飛び越しのために) extern キーワードは必須だわな
0904デフォルトの名無しさん
2015/02/09(月) 09:53:36.26ID:FAf8Hiv40905デフォルトの名無しさん
2015/02/09(月) 10:06:57.78ID:tv87py8a0906デフォルトの名無しさん
2015/02/09(月) 10:08:40.70ID:tv87py8a0907デフォルトの名無しさん
2015/02/09(月) 10:31:53.74ID:im2SOP7pわけわかにする人がいるから・・・
gotoも同じ
0908デフォルトの名無しさん
2015/02/09(月) 18:52:38.18ID:f69VnbTcexternが要らないとか言ってるアホウはQzとか言うゴミクズだけだよ
0909デフォルトの名無しさん
2015/02/09(月) 20:19:31.51ID:/6o1xue1その例なら int my_error と両方に書いて問題ない
問題になるのはライブラリに添付するヘッダにてライブラリ固有の外部静的変数を設けるときだけだ
0910デフォルトの名無しさん
2015/02/09(月) 20:29:33.88ID:dMqS5RFC0911デフォルトの名無しさん
2015/02/09(月) 20:41:06.85ID:U/1UCdd/間違った構文がエラーになる保証はない
0912デフォルトの名無しさん
2015/02/09(月) 20:46:17.70ID:QLXrqJxU言語仕様的に、ライブラリ固有の外部静的変数と、ユーザ定義の外部静的変数に区別はないだろ。
グローバル変数の意味わかってるのか?
0913デフォルトの名無しさん
2015/02/09(月) 20:49:57.58ID:QLXrqJxUそのため外部参照はexternで明確にしないと混乱を招く。
0914デフォルトの名無しさん
2015/02/09(月) 21:37:17.43ID:f69VnbTc>問題になるのはライブラリに添付するヘッダにてライブラリ固有の外部静的変数を設けるときだけだ
ぷぷぷっ これだけ時間かけても、まだここまでしか理解できてないのか。アキレカエル。wwww
ちげーよ。アホウ。wwww
0915デフォルトの名無しさん
2015/02/09(月) 22:27:45.77ID:v6QwQG1G0916デフォルトの名無しさん
2015/02/09(月) 22:30:44.02ID:tSHJtUbI演算子の優先順位を考えるべし。
0917デフォルトの名無しさん
2015/02/09(月) 22:40:11.87ID:BDPeZr7+その後の大きさが状況依存になってしまうから じゃないか?
int a[10];
sizeof a ⇒ sizeof(int) * 10
a++ を許すとする
a++ 以降 sizeof a は sizeof(int)*9 になるのか?
a-- を許すとする
以降 sizeof a は sizeof(int) * 11 なのか?
0918デフォルトの名無しさん
2015/02/09(月) 22:41:02.95ID:v6QwQG1G右結合でstr++が先に評価されstrの指す次のアドレスに間接参照できないのでしょうか?
0919デフォルトの名無しさん
2015/02/09(月) 22:53:17.39ID:BDPeZr7+そのもののインクリメント・デクリメントできない
char str[10]; str++; /* error */
char *str; str++; /* OK */
0920デフォルトの名無しさん
2015/02/09(月) 22:55:21.09ID:tSHJtUbIそうはならないんだな。
*(str++)とするか*++strとしなければいけない。
あるいは、別の文に分けてしまってもいい。一つの文で複数のことをやるのはあまり良くない。
0921デフォルトの名無しさん
2015/02/09(月) 22:57:44.53ID:v6QwQG1G配列を別の関数に参照渡しで受け取った場合コンパイルエラーにならいのは何故でしょうか?
char str1[100]="Hello, World";
test(str1);
〜〜〜〜〜〜〜
void test(char str2[]){
printf("%c", *++str2);
}
eと出力されます
0922デフォルトの名無しさん
2015/02/09(月) 23:01:13.49ID:BDPeZr7+それ ポインタになってる 配列じゃない
0923デフォルトの名無しさん
2015/02/09(月) 23:04:52.89ID:v6QwQG1Gmain関数ないで*++str、*(str++)でも同じくコンパイルエラーになります。
コンパイラはborland c++ 5.5.1です。
エラー内容は"左返値が必要"です。
0924デフォルトの名無しさん
2015/02/09(月) 23:08:10.11ID:dMqS5RFC後置++って単項*より優先順位高くなかったか?
*str++と*(str++)は同じ意味だったと思うぞ
ただ、後置++は式の最後に評価されるって決まりがあるから、*str; str++;と同じ動作になるけど。
まあそもそも配列とポインタ変数の区別が付いてないっぽいけど
0925デフォルトの名無しさん
2015/02/09(月) 23:10:58.17ID:v6QwQG1Gこの場合、配列ではなくポインタになるのでね。
それでは配列で*(str+1)は出来て*str++が出来ない要因はなんでしょうか?
無知ですみません。
0926デフォルトの名無しさん
2015/02/09(月) 23:14:39.33ID:BDPeZr7+0927デフォルトの名無しさん
2015/02/09(月) 23:15:14.90ID:ctAnPJrw(*++argv)[0] == '-'
とか
c = *++argv[0]
とか書くから・・・
0928デフォルトの名無しさん
2015/02/09(月) 23:56:08.84ID:ctAnPJrwK&R p127
>char amessage[] = "now is the time"; /* 配列 */
>char *pmessage = "now is the time"; /* ポインタ */
>ここでamessageは、それの初期値となる文字列と\0をぴったり保持するだけの大きさ
>を持つ配列である。この配列の中の個々の文字は変わり得るが、それでもamessage
>は同じメモリ位置を指す。他方、pmessageは文字列定数を指すよう初期化された
>ポインタである。したがって、このポインタを他の場所を指すように後で変えること
>ができる。
>>919が解説してくれていること。
また、式の中では(関数の仮引数宣言を含めて)配列はポインタに読み替えられるので、
>>921の関数は
void test(char *str2){
printf("%c", *++str2);
}
と書いても同じ。配列str1の先頭アドレス(ポインタ)をポインタstr2に代入して
ポインタを介して操作しているので問題ない。
0929デフォルトの名無しさん
2015/02/10(火) 01:59:59.44ID:v4EqnwDrインクリメントで配列名の指し示す先頭アドレスを書き換えようとしていたのが原因なんですね
有難うございました
0930デフォルトの名無しさん
2015/02/10(火) 06:54:47.14ID:nUBvAJ0tBorlandワカンネ(投げた
0931デフォルトの名無しさん
2015/02/10(火) 17:21:25.67ID:TB/K9hZ4お前のタワゴトの最大の欠陥は、仕様書に「ポータブルではない」と明記されている事だ。
0932デフォルトの名無しさん
2015/02/11(水) 00:32:08.53ID:s2JRlohk#include <stdio.h>
int olympic(int);
int main(void)
{
int year,hold;
scanf("%d",&year);
hold = olympic(year);
switch(hold)
{
case 0: printf("その年はオリンピックは行われなかった"); break;
case 1: printf("その年は夏季オリンピックが行われた"); break;
case 2: printf("その年は冬季オリンピックが行われた"); break;
int olympic(int year)
{
if((year >= 2000) && (year % 2 == 0))
{
if(year % 4 == 0)
{
return 1;
}else{
return 2;
}else{
return 0;
}
}
}
↑のプログラムがうまくいかないんだけど原因がわからない…エラー内容を見るとどうも下の関数がうまく認識?されてない気がする
コピペしたらなんか見にくくなっちゃったスマン
0934デフォルトの名無しさん
2015/02/11(水) 00:38:05.68ID:ducu+T9Eまずはここにエラーになるというコードを貼ってみようか
http://ideone.com/
0935デフォルトの名無しさん
2015/02/11(水) 00:38:48.72ID:8xnZ6D3Q0936デフォルトの名無しさん
2015/02/11(水) 00:44:59.84ID:w+p6CXuc0937デフォルトの名無しさん
2015/02/11(水) 00:53:46.76ID:s2JRlohkごめんもう少し簡単に教えていただけないでしょうか…
>>934
貼って実行?したけどやっぱりエラー出たっぽい
0938デフォルトの名無しさん
2015/02/11(水) 00:59:26.75ID:xS/oPZFt#include <stdio.h>
int olympic(int);
int main(void)
{
int year,hold;
scanf("%d",&year);
hold = olympic(year);
switch(hold)
{
case 0: printf("その年はオリンピックは行われなかった"); break;
case 1: printf("その年は夏季オリンピックが行われた"); break;
case 2: printf("その年は冬季オリンピックが行われた"); break;
}
return 0;
}
int olympic(int year)
{
if((year >= 2000) && (year % 2 == 0)) {
if(year % 4 == 0) {
return 1;
}else{
return 2;
}
}else{
return 0;
}
}
0940デフォルトの名無しさん
2015/02/11(水) 09:02:49.46ID:yrYT/hzdコードが汚かったり非効率的に思えるのはともかく、普通に動いた。
http://ideone.com/o92PN0
0941デフォルトの名無しさん
2015/02/11(水) 09:34:47.79ID:s2JRlohkあっれー?
じゃあコンパイラ側の問題かな
ちょっと他のコンパイラで試してみます
ありがとうございます
0942デフォルトの名無しさん
2015/02/11(水) 09:42:31.13ID:NCwBJrvr0943デフォルトの名無しさん
2015/02/11(水) 09:57:47.86ID:s2JRlohk他になにかあるの?
0944デフォルトの名無しさん
2015/02/11(水) 10:00:08.50ID:r/0eDyUIえ?
>>938のコードでも、まだ動かないの?
コンパイラはなに使ってるの?
0945デフォルトの名無しさん
2015/02/11(水) 10:07:12.72ID:yrYT/hzdクソなコードにコンパイラが警告を出しまくってるとか。
0946デフォルトの名無しさん
2015/02/11(水) 10:18:47.71ID:jxK+Uck3VC++だとコンパイラオプションで警告レベル変更するか、ソースの先頭に
#define _CRT_SECURE_NO_WARNIGS
で警告抑制マクロ定義しないとコードを吐いてくれない。
0947デフォルトの名無しさん
2015/02/11(水) 10:35:10.78ID:g8RVwTicやっぱりCを一通りやった方がC++習得しやすくなるのかな?
0948デフォルトの名無しさん
2015/02/11(水) 10:41:32.40ID:D0nqSOkg#define _USE_MATH_DEFINES を入れておかないと M_PI とか使えないのには参ったぜ…トホホ
0949デフォルトの名無しさん
2015/02/11(水) 10:51:34.26ID:s2JRlohkごめんなさい動きました
見やすく書き直してくれただけかとおもってた、、、
どこがおかしかったか教えていただけると嬉しいです
0950デフォルトの名無しさん
2015/02/11(水) 10:56:21.98ID:s2JRlohk普通にいろいろ抜け落ちてましたすいません
お騒がせしましたm(_ _)m
0951デフォルトの名無しさん
2015/02/11(水) 11:56:40.96ID:zO3T1ON+一応、C++からいきなり学ぶ書籍なんかもあるにはある…のだが
C++の詳しいところを学ぼうとすると大概C言語由来の部分で詰まると思うよ
そしてC++はC由来の部分だけでなく、今は物凄い拡張された言語でもあるから、なかなか消化しきれない
そういう意味ではある程度仕様が限られてるC言語の範囲を学んでおくのはベターなのかなと
0952デフォルトの名無しさん
2015/02/11(水) 12:01:34.06ID:g8RVwTicなるほど
0953デフォルトの名無しさん
2015/02/11(水) 12:32:12.25ID:yrYT/hzdC言語使えるだけでも楽しいもんだぞ。順々に覚えても損はない。
0954デフォルトの名無しさん
2015/02/11(水) 12:40:55.63ID:LbwtxuPp初心者あるある
・なぜかコンパイラを疑う
・なぜかコンパイラの実装を批判
・なぜか言語仕様を批判
・なぜかOSを批判
なぜだか、初心者ほど、こういうことになる
0955デフォルトの名無しさん
2015/02/11(水) 12:45:12.39ID:2YbZ9jaX初心者は批判する能力は無い。ただ疑うのみ。
0956デフォルトの名無しさん
2015/02/11(水) 17:03:33.12ID:uMI9EsOb初期化されないとかw
0957デフォルトの名無しさん
2015/02/11(水) 17:08:14.97ID:VTUkIwUwそれが自己解決って言うんかヨ!
0958デフォルトの名無しさん
2015/02/11(水) 19:07:58.16ID:NCwBJrvr0959デフォルトの名無しさん
2015/02/12(木) 00:06:25.50ID:tZzaZ5PR0960デフォルトの名無しさん
2015/02/12(木) 07:33:39.78ID:gk0AlyzN今ではコンパイラに調教されちゃったけど俺は
0961デフォルトの名無しさん
2015/02/12(木) 07:42:53.30ID:r7IlduRS素人の自分が一人だけで悩んでる
どちらが間違えている確率が高いか?
この事実に気付いた時から処理系やOSのせいにするのを止める
0962デフォルトの名無しさん
2015/02/12(木) 08:44:12.39ID:ExYm7geRでも、だいたい、ご本人様の間違いでちゃんちゃんです
0963デフォルトの名無しさん
2015/02/12(木) 09:07:43.45ID:D8Qo7IfR0964デフォルトの名無しさん
2015/02/12(木) 09:24:04.30ID:NNFkXciWまあ-O3だしな。
0965デフォルトの名無しさん
2015/02/12(木) 18:52:42.09ID:zUM2O0bM知らんかった
0966デフォルトの名無しさん
2015/02/12(木) 19:20:15.61ID:Rk3YDU9iおうよくきたな
>お前のタワゴトの最大の欠陥は、仕様書に「ポータブルではない」と明記されている事だ。
それは >>876 でことわっているだろう、このメクラが
>欠点は、この手法はオブジェクトファイルとリンカ依存であることw
しかしウェルカムだ、またなにかあったらコメントをくれ
http://peace.2ch.net/test/read.cgi/tech/1418073244/371
0967デフォルトの名無しさん
2015/02/12(木) 21:19:49.96ID:r7IlduRS欠点ではない、「最大の欠陥」だ。アホウ。
これまで指摘した以外にも、まだ欠陥がある。
0968デフォルトの名無しさん
2015/02/12(木) 21:25:49.38ID:Rk3YDU9iところ、MASM には EXTERNDEF というものがあるが、これをどう説明する?
0969デフォルトの名無しさん
2015/02/12(木) 22:00:25.62ID:r7IlduRSMASMがCの規格にどう関係してるんだ? アホウ。
0970デフォルトの名無しさん
2015/02/12(木) 22:01:28.21ID:rkSTHNg70971デフォルトの名無しさん
2015/02/12(木) 22:29:21.16ID:IX7zjOl+0972デフォルトの名無しさん
2015/02/12(木) 22:49:39.29ID:Rk3YDU9i必要があるから ver6 からの MASM にそのようなディレクティブが存在するのだろう
それが C にあってもいいのでは?というか、それが「仮定義」の心なのでは?とてもべんりだしね
0973デフォルトの名無しさん
2015/02/12(木) 22:59:08.80ID:rkSTHNg70974デフォルトの名無しさん
2015/02/12(木) 23:03:05.21ID:Rk3YDU9iいや、public と extern が C に対応するものだが、それとは別に externdef があって、状況によって public にも extern にも使えるというやつだ
0975デフォルトの名無しさん
2015/02/12(木) 23:08:53.85ID:rkSTHNg7> 必要があるから ver6 からの MASM にそのようなディレクティブが存在するのだろう
必要があるからexternが存在するとは思わないんですかねぇ……
0976デフォルトの名無しさん
2015/02/12(木) 23:14:17.16ID:Rk3YDU9i0977デフォルトの名無しさん
2015/02/12(木) 23:22:51.60ID:2kUwxM+tこのスレ荒らしてるのかよ
0978デフォルトの名無しさん
2015/02/13(金) 00:05:08.25ID:zNwxzzgtそりゃ、スゲーな。wwww
0979デフォルトの名無しさん
2015/02/13(金) 07:09:12.51ID:ezlWA6530980デフォルトの名無しさん
2015/02/16(月) 18:26:15.05ID:59sd9PV9このページの//迷路初期化という所なんですがそのままVC++2010に通すとスタイルキャストに関するエラーがでます
switch(kind)
{
case PATH:
maze[i].kind = PATH;
maze[i].flag = FALSE;
...省略
という形で書いたら動いたのですがこれはサイトのコードが間違っているのでしょうか
GoogleでC言語 ゲームと検索すると上位に出るのでそんなことはないと思うのですが
0981デフォルトの名無しさん
2015/02/16(月) 18:58:01.97ID:rzBZ3TL9でも、CじゃなくてC++でコンパイルしてるだろ。
0982デフォルトの名無しさん
2015/02/16(月) 21:02:40.33ID:l4d0IMMY0983デフォルトの名無しさん
2015/02/16(月) 22:07:22.39ID:sV2TdEmn理解できました
ありがとうございます
0984デフォルトの名無しさん
2015/02/17(火) 05:59:27.19ID:ZFpu07nN0985デフォルトの名無しさん
2015/02/17(火) 07:03:20.25ID:NGo27G1P0986デフォルトの名無しさん
2015/02/17(火) 20:58:23.36ID:9pmimCtR0987デフォルトの名無しさん
2015/02/17(火) 21:41:32.60ID:Fk3ZHsId0988デフォルトの名無しさん
2015/02/17(火) 21:42:59.49ID:xgmY9b+s0989デフォルトの名無しさん
2015/02/17(火) 22:00:40.17ID:Fk3ZHsId0990デフォルトの名無しさん
2015/02/17(火) 23:55:03.03ID:vdudd8Dx0991デフォルトの名無しさん
2015/02/18(水) 00:03:02.57ID:jcJgiA8X0992デフォルトの名無しさん
2015/02/18(水) 02:14:42.84ID:u0qlpATY0993デフォルトの名無しさん
2015/02/18(水) 02:19:52.44ID:y6/Z4Lk10994デフォルトの名無しさん
2015/02/18(水) 05:33:35.06ID:GmxPl0V40995デフォルトの名無しさん
2015/02/18(水) 12:32:20.24ID:/l9qjBka0996デフォルトの名無しさん
2015/02/18(水) 15:40:00.12ID:G395GlE90997デフォルトの名無しさん
2015/02/18(水) 16:32:48.45ID:s5Vrc8egC言語なら俺に聞け(入門編)Part 127(c)2ch.net
http://peace.2ch.net/test/read.cgi/tech/1424244688/
0998デフォルトの名無しさん
2015/02/18(水) 16:48:32.86ID:y67hweeT0999デフォルトの名無しさん
2015/02/18(水) 18:02:06.92ID:gPZA2ZnI1000デフォルトの名無しさん
2015/02/18(水) 18:03:00.89ID:gPZA2ZnI10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。