1 名前:デフォルトの名無しさん [2017/08/10(木) 20:21:23.44 ID:hEocmkh50.net] C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ 前 mevius.2ch.net/test/read.cgi/tech/1500293207/ www.geocities.jp/c_cpp_cs/about_c/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
751 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 02:10:37.75 ID:12RNBD+40.net] >>739 https://qiita.com/Tsutajiro/items/a5620b17ac530cc96e87 https://ja.wikipedia.org/wiki/Scanf www9.plala.or.jp/sgwr-t/c/sec05.html rainbow.pc.uec.ac.jp/edu/program/b1/Ex2-1b.htm https://stackoverflow.com/questions/2155518/what-is-scanfs-and-scanfd-format-identifiers 「scanf("%s"」とグルるだけで、バッファオーバーランの危険がある注記のない上記記事が山のようにでてくる。 おすきなだけどうぞ、このように説明の手間を省きおざなりに scanf("%s") としてその場をとりつくろい、 読んだ人間は経験が少ないため、これでもいいのか、と勘違いしてしまう例は多々ある scanf() は悪 やるんなら、fgets() してから sscanf() だの atoi() だの strtol() だので処理するのが定石
752 名前:デフォルトの名無しさん [2017/10/15(日) 04:40:36.84 ID:aLoOQk2A0.net] >>727 てか、C言語のライブラリの問題なのであるともないとも言えるよな。 POSIX準拠でないCコンパイラでも同じ動きをするライブラリをリンク時または実行時にリンクするならそう動くわけだし。 WindowsでもGCCでコンパイルするならそうなるわけだし。Cygwinの中ならなおのことそうだ。
753 名前:デフォルトの名無しさん [2017/10/15(日) 05:29:35.87 ID:ZgJv24or0.net] そう言えば fgets() も1行の長さが指定した長さ以上になった場合に入力に残るよな。 で、だいたいは妙に長いバッファ用意して誤魔化す(またはそういう仕様にするw)わけだが、 そういうのが通用しない場合はそれを上回る入力をされた時にエラーにするかまたは入力に 残った不要な文字列を捨てる処理はあった方が良い。そうでないなら GCC の getline() を 使うかまたは自作するかだ。
754 名前: mailto:sage [2017/10/15(日) 06:22:39.79 ID:12RNBD+40.net] >>743 昔宿題スレで作ったけれども忘れてしまった,まあ誰しも一回はつくるものじゃないかな
755 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 07:05:24.20 ID:KCBqed/H0.net] >>743 > そう言えば fgets() も1行の長さが指定した長さ以上になった場合に入力に残るよな。 当たり前だろ より長い入力が想定されるなら普通に改行がでてくるまで続けて読めばいいだけだし 妙に長いバッファとかアホすぎる w
756 名前:名無し@キムチ [2017/10/15(日) 08:51:39.88 ID:kjrLb6gv0.net] フィギュアスケートアニメーション作成ソフト「振付王」公開!! ダウンロード↓ www.vector.co.jp/soft/winnt/game/se516681.html デモ動画↓ youtu.be/j8KjRXr7zGs
757 名前:デフォルトの名無しさん [2017/10/15(日) 09:47:59.48 ID:J//jr+AC0.net] はははは、やっとn=6か で、%sさえ使わなきゃscanfは安全なのか?
758 名前:デフォルトの名無しさん [2017/10/15(日) 09:48:32.63 ID:J//jr+AC0.net] >>741 >>747
759 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 10:01:56.35 ID:12RNBD+40.net] >>747 >はははは、やっとn=6か いくらでも増やせますが >で、%sさえ使わなきゃscanfは安全なのか? fgets() 推しの俺にきかれても,そんなことはわからない‥(困惑)
760 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 10:17:19.28 ID:2VM8B8DT0.net] %sの危険性を長々と説明しているwikipediaを挙げてるんだからギャグのつもりだろ stackoverflowも%sではなく%*sだし、scanf使ったことないのかな?
761 名前:デフォルトの名無しさん [2017/10/15(日) 13:38:38.59 ID:R4tP3Q0h0.net] >>749 わからないだと? おまえシッタカこいてただけか まあそうだろうな、%s以外に言及できないようだから
762 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 14:19:43.64 ID:12RNBD+40.net] >>751 fgets()でとりあえず読み込むのは有力な方針だからね、まあsscanf() を後段で使うことはあるね scanf() のチマチマした書式は必要時に追いかければいい、今調べる必要はないと思うね >シッタカ 大局観といってほしいね
763 名前:デフォルトの名無しさん [2017/10/15(日) 17:10:16.88 ID:/ln1Xcyy0.net] scanf vs fgets もう終わり?
764 名前:デフォルトの名無しさん [2017/10/15(日) 17:14:39.09 ID:Yk/ODCzd0.net] くだらん戦いだ
765 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 17:27:36.97 ID:12RNBD+40.net] あおりネタがなくてごめん…
766 名前:デフォルトの名無しさん [2017/10/15(日) 19:51:17.65 ID:DZC0OlhV0.net] >>753 終わりつーか始まってない そもそもscanfを把握してない御仁とでは話にならなくて
767 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 20:51:34.80 ID:12RNBD+40.net] scanf() の詳細仕様を把握しないと判断できない、というのはどうかな? scanf() が初期のころから建て増し建て増しでどんどん増えていったあの方向性は、正しくない複雑化のしかただと思うよ scanf() を書く側にたってみると、おぞましい
768 名前:デフォルトの名無しさん [2017/10/15(日) 21:09:03.11 ID:Yk/ODCzd0.net] scanf() scanf() scanf() scanf() scanf()
769 名前:デフォルトの名無しさん [2017/10/15(日) 21:13:13.74 ID:Y+x8OcED0.net] 超ド級初心者なんだけどおすすめの開発環境とかある?
770 名前:片山博文MZ mailto:sage [2017/10/15(日) 21:14:17.56 ID:3VVV/TO4d.net] >>759 Visual Studio 2017。デバッグが簡単で分
771 名前:ゥりやすい。 [] [ここ壊れてます]
772 名前:デフォルトの名無しさん [2017/10/15(日) 21:17:59.72 ID:Y+x8OcED0.net] vs2017コンパイルの仕方がわからなかった(´・ω:;.:...
773 名前:片山博文MZ mailto:sage [2017/10/15(日) 21:20:39.95 ID:3VVV/TO4d.net] >>761 プロジェクトにソースファイルを追加して、デバッグメニューからビルドを選ぶだけだぜ。
774 名前:デフォルトの名無しさん [2017/10/15(日) 21:22:30.69 ID:Y+x8OcED0.net] ビルド押したんだけど反応がなかったんだ・・・ もっかい調べなおしてみる ありがとう
775 名前:デフォルトの名無しさん [2017/10/15(日) 21:51:37.18 ID:DZC0OlhV0.net] >>757 建て増しする前の単純な仕様のscanfでさえ %sしか攻撃できない空っぽ脳みそと どうやってコミュしろというのか教えてくれ
776 名前:デフォルトの名無しさん [2017/10/15(日) 21:56:59.72 ID:kn6M0KEM0.net] >>763 プロジェクト作成しないとビルドできない
777 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 22:38:21.05 ID:kUtdNYE20.net] 開発環境はvim+gccだろ?
778 名前:デフォルトの名無しさん [2017/10/16(月) 05:28:44.80 ID:6Nh3McCV0.net] C言語知ってたらC++簡単に扱える?
779 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 05:48:39.32 ID:imM7X4iq0.net] 基本的に別の言語
780 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 06:10:08.45 ID:00rzJKO2d.net] vs2017ならフォルダを開くで 勝手にプロジェクトが作られるんじゃなかったかな
781 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 06:35:40.79 ID:IzFutT5/0.net] 開発環境はvim+gcc、そしてmakeだな。 人に勧めようとは思わないけどね。
782 名前:デフォルトの名無しさん [2017/10/16(月) 06:42:19.28 ID:6Nh3McCV0.net] まあ入出力でCとC++で違うのは解ってたけど本読んで書いてあったのはC++で書いて動かなかったら 最悪Cで書けば動かせるということは書いてあったな
783 名前:デフォルトの名無しさん [2017/10/16(月) 11:15:45.26 ID:tZR41NVXp.net] つか、コマンドラインアプリで文字列受け取るのは、実行時引数だけで充分だろ。
784 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 13:10:18.09 ID:IgMp2p2X0.net] パイプやリダイレクト
785 名前:デフォルトの名無しさん [2017/10/16(月) 14:21:36.48 ID:JrEYnkdn0.net] 対話型ツールなら、きちんと入力解析エンジン載せれや。 なんだよscanfってw
786 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 14:22:15.72 ID:QsDGIdoW0.net] gccのワーニングで、「declared inside parameter list」これを無視したいです。 -Wではじまるオプションはなにを指定すればよろしいですか? #pragma GCC diagnostic ignored "-W???
787 名前:片山博文MZ mailto:sage [2017/10/16(月) 14:30:52.70 ID:XYyvKIYbd.net] >>775 [enabled by default]と書いてあるだろ? この警告はフラグで消せない。アホなコードを直すしかない。
788 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 14:47:20.37 ID:QsDGIdoW0.net] >>776 フラグ以外での除去方法もないのでしょうか? 大量にでるために困っています
789 名前:片山博文MZ mailto:sage [2017/10/16(月) 14:50:42.52 ID:XYyvKIYbd.net] >>777 警告は、引数リストの外側で必要なものを宣言すべきという意味だ。
790 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 14:55:55.53 ID:IgMp2p2X0.net] https://ideone.com/91sohX へぇ 構造体のポインタだし通しそうだけど警告出す仕様なのか (3行目 実体は不明だけど構造体のポインタを受け取るぞ宣言で警告)
791 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 14:58:01.40 ID:rvbv2fod0.net] >>775 gcc -w
792 名前:片山博文MZ mailto:sage [2017/10/16(月) 14:58:20.84 ID:XYyvKIYbd.net] 関数の前にstruct aho;とでも書いておけ。
793 名前:デフォルトの名無しさん [2017/10/16(月) 15:04:51.05 ID:QsDGIdoW0.net] >>778 原因はわかっています。 構造体宣言を別のヘッダーで行っているにもかかわらず、 プロトタイプ宣言しているヘッダーより上に定義がないのが原因です >>780 gcc -w ? #pragma GCC diagnostic ignored "-w" でしょうか?
794 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 15:09:07.34 ID:IgMp2p2X0.net] 本当の定義じゃなくて 仮定義を前に置くだけで消えるのな struct foo; void func(struct foo* arg);
795 名前:sage [2017/10/16(月) 15:25:30.24 ID:QsDGIdoW0.net] >>783 やはりそのように潰していくしかないのでしょうね。
796 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 15:43:34.17 ID:rvbv2fod0.net] >>782 -Wで始まるオプション名は無いので無視するにはコマンドラインで-wを指定するしかない
797 名前:デフォルトの名無しさん [2017/10/16(月) 22:46:04.81 ID:snZUUJVe0.net] >>784 いや、てか、そのヘッダ書き換えられないのか?
798 名前:デフォルトの名無しさん [2017/10/16(月) 22:49:48.00 ID:tZR41NVXp.net] 自身のポインタを構造体に宣言するのと同じ様に書けよ。
799 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:21:23.22 ID:7Byc8Q4r0.net] >>767 C 高級アセンブラ ++ ハナモゲラ
800 名前:デフォルトの名無しさん [2017/10/17(火) 20:18:22.83 ID:Q3d5MYhb0.net] とりあえず勉強の成果として作ってみたら失敗した なんでだ #include <stdio.h> int main(void) { int hyoji; int kakikomi; printf("階乗の表示:"); scanf("%d\n",&kakikomi); for (hyoji = 1;kakikomi > 0;kakikomi--) { hyoji = hyoji * kakikomi; } printf("結果は%dです", hyoji); fflush(stdin); getchar(); return 0; }
801 名前:デフォルトの名無しさん [2017/10/17(火) 20:29:18.04 ID:FJCAd6676.net] >>789 scanfのところの\nって要らなくね
802 名前:デフォルトの名無しさん [2017/10/17(火) 20:54:03.89 ID:Usq7nzejp.net] こんなすぐに桁溢れしちまう様なサンプル作ったら、何を試したいのかわからんだろ。
803 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 21:06:51.02 ID:BSHBGdow0.net] しかしてfor文の中身を見るに全くの素人じゃあないな
804 名前:デフォルトの名無しさん [2017/10/17(火) 21:08:48.81 ID:Q3d5MYhb0.net] >>790 消したら動いた ありがとう
805 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 21:24:15.93 ID:0jVjcAN80.net] >>792 どのあたりが?
806 名前:デフォルトの名無しさん [2017/10/17(火) 21:33:12.55 ID:Usq7nzejp.net] 初期化をあんなとこに書いたらコーディング規約で叩かれるしなぁ〜
807 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 21:46:54.15 ID:fHKaWaxJM.net] >>794 forのカッコ内には同じ変数しか書いちゃダメって思ってる初心者はいるかも 個人的には変数名からCOBOLer疑惑の方が強い気がする
808 名前:デフォルトの名無しさん [2017/10/17(火) 21:57:54.65 ID:Q3d5MYhb0.net] VS2017でやってるんだがさっき作ったプログラムを保存して別のファイルで勉強を再開しようとして新しくファイルを作ったんだ そしてテストも兼ねてさっきのプログラムコピペしたら プリコンパイルヘッダーを検索中に不明なEOFが見つかりました。 '#include"stdafx.h"をソースに追加しましたか? と出た さっきは何もなかったのに
809 名前:デフォルトの名無しさん [2017/10/17(火) 22:19:31.03 ID:PpmRGT3a0.net] >>797 それな よく分からんけど空のプロジェクトってやつでプロジェクト作って自分でソースファイル作成すれば出てこない まあ詳しい人が教えてくれるかも
810 名前:片山博文MZ mailto:sage [2017/10/17(火) 22:26:24.33 ID:/2LkUivAd.net] >>797 プリコンパイルヘッダーというのは、プロジェクト内のヘッダーを事前にまとめてコンパイルしてビルドを早くする仕組みのことだ。 通常、stdafx.hというヘッダーにプロジェクトで使うヘッダーをまとめる。 一つ一つのソースファイルごとのプロパティでプリコンパイルヘッダーを作成するか、使用するかを設定できる。
811 名前:デフォルトの名無しさん [2017/10/17(火) 22:30:05.39 ID:Q3d5MYhb0.net] >>799 つまり…どういうことだってばよ
812 名前:デフォルトの名無しさん [2017/10/17(火) 22:35:56.33 ID:Q3d5MYhb0.net] ソースコード関係の知識は苦Cやらで積めるけどソフトやらの知識はどこで積むんだ
813 名前:片山博文MZ mailto:sage [2017/10/17(火) 22:36:28.37 ID:/2LkUivAd.net] プリコンパイルヘッダーを使用するのであれば、プロジェクト内のどこかのソースファイル(例えばstdafx.cpp)を使って、プリコンパイルヘッダーを作成しないといけない。 あるソースファイルにおいてプリコンパイルヘッダーを使用するのであれば、プリコンパイル対象のヘッダーを#includeして、そのソースファイルがプリコンパイルヘッダーを使用することを設定する。 プリコンパイルヘッダーを使用しないなら、すべてのソースのプロパティでプリコンパイルヘッダーを使用しないように設定する(空のプロジェクトの規定値)。
814 名前:片山博文MZ mailto:sage [2017/10/17(火) 22:39:12.15 ID:/2LkUivAd.net] ソースファイルが二、三個なら、とくにプリコンパイルヘッダーは、必要ない。
815 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 22:43:34.43 ID:kMB04QqG0.net] >>800 おとなしく>>798 の言う通りにしろってこと
816 名前:片山博文MZ mailto:sage [2017/10/17(火) 22:44:21.68 ID:/2LkUivAd.net] ソースファイルのプロパティは、IDE内のソースファイルのアイコンを右クリックして「プロパティ」を選ぶと設定できる。
817 名前:デフォルトの名無しさん [2017/10/17(火) 22:59:14.26 ID:Q3d5MYhb0.net] >>804 とりあえず空のファイルは作れたけどソースが書けん
818 名前:デフォルトの名無しさん [2017/10/17(火) 23:01:36.30 ID:PpmRGT3a0.net] 新しいプロジェクト ↓ 空のプロジェクトを作成 ↓ 空のソースコードファイルを追加 ↓ >>789 をコピペ ↓ 実行
819 名前:デフォルトの名無しさん [2017/10/17(火) 23:02:26.49 ID:Q3d5MYhb0.net] >>807 空のソースコードファイルどうやって作るんだ
820 名前:デフォルトの名無しさん [2017/10/17(火) 23:08:36.86 ID:PpmRGT3a0.net] >>808 プロジェクト開いたときの右にあるソリューションエクスプローラの中のソースファイルというフォルダを右クリックして「追加」から「新しい項目」をクリック。 「C++ファイル」を選択した状態でファイル名の拡張子を.cに変えて「追加」ボタンを押す。
821 名前:デフォルトの名無しさん [2017/10/17(火) 23:15:28.33 ID:Q3d5MYhb0.net] >>809 できた もしこれから新しくファイルを作る場合はこれを一からやるのか?
822 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 23:17:42.23 ID:nwT4mK5H0.net] そろそろ適切なスレに移動しようか
823 名前:デフォルトの名無しさん [2017/10/17(火) 23:18:59.07 ID:PpmRGT3a0.net] >>810 うん。 簡単なプログラムならVSでプロジェクト作るよりもスタートメニューのVSのフォルダの中にある開発者コマンドプロンプト使ってclコマンドでコンパイルした方が手軽だな
824 名前:デフォルトの名無しさん [2017/10/17(火) 23:21:25.70 ID:Q3d5MYhb0.net] >>812 ありがとう これ以上はスレチだからやめておこう
825 名前:デフォルトの名無しさん [2017/10/17(火) 23:46:56.11 ID:PpmRGT3a0.net] スレチかもしれないけどVS2017でANSI C(C99/98, ブロック先頭でしか宣言できないやつ)だけしかかけないようにできますか?
826 名前:デフォルトの名無しさん [2017/10/18(水) 18:18:50.69 ID:oOtBC3bP0.net] みなさんは関数名の後に続く中括弧の前に改行を入れますか?入れませんか? 例えば、 int main(void) { /* 処理 */ } のようにするか、 int main(void) { /* 処理 */ } のように書くのか、どちらが多いのか気になります。
827 名前:デフォルトの名無しさん [2017/10/18(水) 18:20:58.46 ID:M3PcmRrI6.net] 入れます
828 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 19:40:16.86 ID:3bYwz/rX0.net] if () { } ならいいけど for () { } だと整合性無いじゃん って話なら気にするな だな
829 名前:デフォルトの名無しさん [2017/10/18(水) 21:12:51.09 ID:QINtBhkfp.net] 各社のコーディング規約に合わせます。
830 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 21:18:46.08 ID:lHCL+31VM.net] >>815 >>604
831 名前:デフォルトの名無しさん [2017/10/18(水) 23:24:47.06 ID:bG8m3FQp0.net] >>815 改行入れるね。 なんでそうなったかというと、C言語は昔は引数の型をカッコ内に書けなかった。つまり int main(argc, argv) int argc; char *argv[]; { ・ ・ ・ return 0; } のようにしか書けなかった。その当時から覚え始めたというのと、K&R もそれで書いて あったのでそのまま何も考えず俺の中で改行入れるのが定着した。
832 名前:デフォルトの名無しさん [2017/10/19(木) 01:30:41.79 ID:gvKdwGxW0.net] for() { } こうしたときに一行増えるから嫌だだっていう人が多そうだな
833 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 07:54:32.06 ID:b5KBJ9M60.net] それは宗教問題なので決着は付きません。
834 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 09:08:44.46 ID:TosC+FXp0.net] 関数では改行して、制御構文では改行しない みたいなオレルールにしてる
835 名前:デフォルトの名無しさん [2017/10/19(木) 10:07:41.47 ID:+lKpulfRp.net] c#みたいにメソッドを直接鉤括弧内にベタ書き出来る言語でもなけりゃ先行改行一択なんだがなあ
836 名前:デフォルトの名無しさん [2017/10/19(木) 10:25:15.32 ID:r/pcyA6+0.net] 貴重な一行
837 名前:デフォルトの名無しさん [2017/10/19(木) 10:27:21.64 ID:SxBqlyg46.net] >>824 どういう意味?
838 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 11:44:04.67 ID:zAbDVwTYM.net] 今みたいに時間単価での清算が主流になる前は、 ステップ単価清算ってのもあって、K&R以外で書くと 増量しているって言われていたの。 cb とか indent なんてコマンドはその名残かな
839 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 12:07:16.71 ID:TosC+FXp0.net] >>826 無
840 名前:名関数が書けると最初の { 前の改行がおかしい気になるので 自動的に改行入れない派になるという話では? [] [ここ壊れてます]
841 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 12:17:59.77 ID:rxi99hG50.net] >>823 俺もそれで落ち着いた
842 名前:デフォルトの名無しさん [2017/10/19(木) 12:34:12.75 ID:LAmWAPnYM.net] >>815 統計取る方法がないから、確実な答えはわからないと思うよ。 で、戦争のたびに出る結論が「気にするな」「仕事環境に従え」なんだよねー。 で、俺はどうかと言うと、俺も不思議と>>823 に落ち着いた。
843 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 14:41:51.95 ID:cxE3kH8I0.net] https://ja.wikipedia.org/wiki/字下げスタイル 戦争だ
844 名前:デフォルトの名無しさん [2017/10/19(木) 15:33:33.89 ID:PsgLgPWo0.net] 9cguide.appspot.com/15-05.html これのモードの切り替えってところで判定結果違うんだが俺だけ? pがでたらめな数字になる コピペしても変わらなかったから多分タイプミスとかじゃないと思う
845 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 15:40:34.18 ID:cxE3kH8I0.net] 下の[実行結果] のように出力されるためには × printf("p = %d\n",p); ○ printf("*p = %d\n",*p); でないとな
846 名前:デフォルトの名無しさん [2017/10/19(木) 15:50:26.60 ID:PsgLgPWo0.net] できた ありがとう
847 名前:デフォルトの名無しさん [2017/10/19(木) 22:50:52.77 ID:4jVxr5CI0.net] 10 1 scanf("%d%d", a, b); こう読み込んだ時に空白を飛び越えて読み込んでくれるん? 10,1 この時はエラーになっちゃう?
848 名前:デフォルトの名無しさん [2017/10/19(木) 22:53:39.25 ID:Y4NllfOF0.net] 多分空白はできる ,を入れたかったら%d,%dすれば多分できる
849 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 23:25:36.20 ID:6TDKNKTM0.net] scanfのフォーマット指定は面倒だぞ 正直使いこなす気すらない
850 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 23:26:22.86 ID:6TDKNKTM0.net] if () { } else { } 無いわな
851 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 23:41:36.02 ID:c1L92+Tr0.net] if () { } else { } このフォーマットだと心が平和
852 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 23:52:20.12 ID:vx5pXf0B0.net] >>828 うん、さっぱり分からん そもそも鉤括弧って「」だし。
853 名前:デフォルトの名無しさん [2017/10/20(金) 00:41:34.11 ID:Wby94Fq80.net] >>837 入力が決められてなかったらscanfじゃあできないからわかるわー
854 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 01:19:37.06 ID:l11teSHI0.net] >>839 俺もそれ
855 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 04:37:42.47 ID:yDlUYSKqd.net] >>827 バージョン管理、コーティング規約対応用だろ 空白文字の使い方に無頓着なカスが存在する限り必須
856 名前:デフォルトの名無しさん [2017/10/20(金) 09:24:11.93 ID:NCAWbF0uE.net] 本買うお金がないのですが公式なドキュメントってどこで見れますかね?
857 名前:デフォルトの名無しさん [2017/10/20(金) 09:53:04.65 ID:VprmOZRL0.net] >>1 に書いてあるのではだめなん。
858 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 09:58:32.79 ID:rxHA3C970.net] 質問が漠然としすぎてる。
859 名前:デフォルトの名無しさん [2017/10/20(金) 10:55:02.73 ID:7oD3lqB2p.net] C言語の仕様は規格が決まってるから、調べれば幾らでもネットに落ちてるんだがなぁ〜
860 名前:デフォルトの名無しさん [2017/10/20(金) 10:56:41.44 ID:7oD3lqB2p.net] ランタイムライブラリやプラグマやデファインの事なら使ってるコンパイラにドキュメントがあるだろ?
861 名前:デフォルトの名無しさん [2017/10/20(金) 12:36:54.91 ID:XMzxe3/+0.net] ネスティングを気にするかどうかは各自のスタイルによる 気にならない書き方はいくらでもできるし ファイル分割がいやでべた書きする奴はネスティング気にするだろ
862 名前:デフォルトの名無しさん [2017/10/20(金) 12:40:39.31 ID:3KJGg1dF6.net] どう思う? #include <stdio.h> void test(a, b, c) int *a; int *b; int *c; { *c = *a + *b; } int main(void) { auto register int a; auto register int b; auto register int result; a = 10; b = 32; test(&a, &b, &result); printf("%d + %d = %d\n", a, b, result); return 0; }
863 名前:デフォルトの名無しさん [2017/10/20(金) 12:43:18.91 ID:XMzxe3/+0.net] ネスティングが浅い記述
864 名前:しか書かない奴にとってはどうでも良い案件なんですよ 技術計算を多用するコード例だとネスティングちゃんとしないと分けがわからなくなる [] [ここ壊れてます]
865 名前:デフォルトの名無しさん [2017/10/20(金) 17:02:28.07 ID:Hcn/q6HeM.net] なんで配列の要素数って省略してもいいのですか?
866 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 17:49:45.76 ID:vESwnO6R0.net] >>852 どの場面での話かな?
867 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 17:51:51.23 ID:w9jbL0YF0.net] >>852 コンパイラは要素数を数えられるから (要素数を数えられない場合は省略できない)
868 名前:デフォルトの名無しさん [2017/10/20(金) 17:57:17.39 ID:7oD3lqB2p.net] 配列は何次元でも扱える代わりに中身の管理は利用者に一任されたんだ。
869 名前:デフォルトの名無しさん [2017/10/20(金) 18:16:01.46 ID:Hcn/q6HeM.net] >>853 配列の宣言の時です。 省略してはいけないのはどういう場面ですか?
870 名前:デフォルトの名無しさん [2017/10/20(金) 18:42:47.35 ID:3KJGg1dF6.net] >>856 初期化無しの宣言とか?
871 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 20:01:48.14 ID:l11teSHI0.net] >>856 × int ary[]; ○ int ary[] = {1,2,3};
872 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 02:37:55.69 ID:xu+p9cdr0.net] >>850 どうも思わない。 ま、 register はコンパイラが無視するんだろうな。
873 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 07:38:47.06 ID:KIdTQfIK0.net] >>850 すごく… 古くさいです… それはともかく register 宣言した変数は アドレス取ろうとした時点でコンパイルエラーじゃなかったかな? あと俺の環境では auto と register の同時指定がダメと言われる。 古いコンパイラだとどっちも許されるんだっけ。
874 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 08:06:44.87 ID:Q5TWqxQz0.net] 実装は知らんが、言語仕様だと昔からstorage classの指定は1つだけ
875 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 08:49:05.01 ID:TZDyO3Kt0.net] registerは可能ならばレジスタに割り当てると言う意味なので、アドレス演算子を使えばレジスタに割り当てられない 利用可能なレジスタ数を超えてregisterが使われうる可能性を考えれば明らか autoとも併用できないし、半可通としか言いようがない
876 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 09:07:38.36 ID:1UmE9CdHM.net] >>862 それC++限定じゃね?
877 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 09:44:36.79 ID:TZDyO3Kt0.net] >>863 言いがかりをつけたいなら「規格書のxxにこう書いてある」と調べてからつけろ
878 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 09:55:57.60 ID:fkuXV6f/0.net] C++のautoは別の話
879 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 10:41:15.21 ID:1UmE9CdHM.net] >>862 の前半、register変数のアドレスを取ろうとすると gccもclangもエラーになるけど、これは規格違反と?
880 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 10:46:45.41 ID:KlHNvq3I0.net] 仕事で5年くらいMATLABやってたけど来月からC言語やらなあかん 難しそうで、もうイヤイヤ期よ C なんて10年くらい前に大学の講義でチョロチョロってやっただけ 応援メッセージ待ってます! (´;ω;`)
881 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 10:51:19.46 ID:sVexF7NP0.net] がんぱれ
882 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 11:33:55.75 ID:fkuXV6f/0.net] >>866 Visual Studioでもエラーになる まあ当然だわな
883 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 11:38:57.68 ID:Q5TWqxQz0.net] >>864 規格書の 6.5.3.2 Address and indirection operators に The operand of the unary & operator shall be either a function designator, the result of a [] or unary * operator, or an lvalue that designates an object that is not a bit-field and is not declared with the register storage-class specifier. こう書いてある
884 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 11:53:08.06 ID:Q5TWqxQz0.net] K&Rの1stでも the address-of operator & cannot be applied to them. って書いてあるよ
885 名前:デフォルトの名無しさん [2017/10/21(土) 12:04:46.13 ID:VJktQUPlp.net] 俺にはレジスタ変数に割り当てた変数を関数のアドレス渡し引数にする意図が想像できない。 そんなにオーバーヘッド気になるなら、グローバル変数でレジスタ変数宣言してしまえって思う。
886 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 12:12:52.67 ID:Q5TWqxQz0.net] >>872 外部宣言にregisterは使えないぞ
887 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 12:18:48.95 ID:Hb3Ud/Wn0.net] オーバーヘッド気にしてたらコンテキストスイッチングとかどうすんだ?
888 名前:デフォルトの名無しさん [2017/10/21(土) 12:43:51.25 ID:VJktQUPlp.net] じゃあそんなクリティカルな問題無い様に、関数化する事自体を諦めた方がいいのでは?
889 名前:デフォルトの名無しさん [2017/10/21(土) 12:46:37.26 ID:VJktQUPlp.net] ヘッダーファイルにインライン宣言した関数を記述してしまうって解決方法もあるよな?
890 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 12:55:25.34 ID:fkuXV6f/0.net] >>873 さすがにネタだろ
891 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 18:44:07.64 ID:KlHNvq3I0.net] >>868 ありがとう このスレに書いている単語が全然分からんw 何を話してるのかも分からんw みんな凄すぎやわ…
892 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 20:20:57.18 ID:fkuXV6f/0.net] >>878 register関係は爺の昔話だから無視していい
893 名前:デフォルトの名無しさん [2017/10/21(土) 20:38:07.37 ID:LO7dvffl0.net] グローバル変数をregister指定できたり楽しかったなあ
894 名前:デフォルトの名無しさん [2017/10/21(土) 20:48:45.74 ID:S+Fuo4jD0.net] いや、指定しても実際効果あるか無いかってだけだからなぁ
895 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 21:14:54.66 ID:sahtjmhqM.net] >>878 ネットのプログラミング自習動画見てみたら?
896 名前:デフォルトの名無しさん [2017/10/21(土) 23:00:30.68 ID:qfiVibk/0.net] 10年前にC言語覚えたなC#もないopenGL作る時も基礎が出来てない白紙から打ち込んでたから凄い大変だったのを思い出したわ
897 名前:デフォルトの名無しさん mailto:sage [2017/10/22(日) 05:28:16.50 ID:m20yJ7cw0.net] register宣言とアドレス演算子の話だけど、 Cではエラー、C++だとアドレスを取れる(register指定は無視される)、みたいね。 望洋さんのファックとWikipediaのC++に出てたわ。 …実は逆に覚えててね。 レジスタに割り当てた変数の変数のアドレスが欲しいってのは矛盾してるから、 C++は厳格にチェックするかと。
898 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 07:11:33.28 ID:dj2Vz85u0.net] >>884 俺もそう思う registerはprvalueであるべき
899 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 11:32:38.17 ID:r2h/pPG10.net] レジスタってメモリ番地をもってるのか? 持ってない番外地なんじゃねえの?
900 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 11:38:07.26 ID:rLWliBun0.net] >>886 そうだよ。そこは誰も疑問に思ってない。
901 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 12:31:48.51 ID:NaoIEEjs0.net] 世の中には、レジスタがメモリーの先頭と同じ位置にマッピングされてるCPUだってあるけどな。
902 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 13:39:13.59 ID:f5TzHp7R0.net] 質問です。ポインタ変数を用いてキーボードから入力された5つの整数を配列xに保存し、その要素の列挙と合計値を求めるプログラムを作ったのですが、 #include <stdio.h> #include <stdlib.h> int main (void){ int *p,x[4],sum=0,i,j; p=&x[0]; for(i=0;i<=4;i++){ printf("%dつ目の整数を入力してください ",i+1); scanf("%d",p); sum=sum+*p; } for(j=0;j<=4;j++){ printf("%d ",*(p+j));} /*配列の要素を列挙*/ printf("\n和=%d",sum); /*配列の要素の和*/ return 0;} で、結果が 1つ目の整数を入力してください 1 2つ目の整数を入力してください 2 3つ目の整数を入力してください 3 4つ目の整数を入力してください 4 5つ目の整数を入力してください 5 5 4200864 6422368 4200955 6422288 和=15 となり、要素の列挙がうまくいかないので対策を教えていただきたいです。
903 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 13:49:53.88 ID:rI45lLhS0.net] そりゃ最初に p に代入した同じ入れ物に入力値を保存してるからね。 ++p とかしてみたら?
904 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 13:55:57.90 ID:pqhboyRRp.net] 素直に配列使え。
905 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 14:15:34.40 ID:m20yJ7cw0.net] scanf() での値の格納先 (== sumに加える値の参照先) である p を 初期化時の &x[0] のまま進めてないから入力した値が上書きされるんだよ。 もちろん x[1], x[2], ... には値が入らない。 質問の趣旨と関係ない部分を指摘して混乱させるつもりはないんだけど、 配列 x[] の要素数が足りないのがオジさん気になるなぁ。
906 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 15:12:18.96 ID:2+N8xzsVa.net] >>889 既に>>890-892 が指摘済みだけど #include <stdio.h> #include <stdlib.h> int main (void){ int *p,x[5],sum=0,i,j; /* x[5] */ p = x; for(i = 0;i <= 4; i++, p++){ printf("%dつ目の整数を入力してください ",i+1); scanf("%d", p); sum += *p; } p = x; /* ポインタの参照位置を配列先頭へ */ for(j = 0; j <= 4; j++){ printf("x[%d]=%d, ", j, *(p+j) ); }/*配列の要素を列挙*/ printf("\n和=%d\n ",sum); /*配列の要素の和*/ return 0; }
907 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 15:20:05.53 ID:f5TzHp7R0.net] 大学で勉強し始めたばかりなので全然で… みなさんありがとうございました。
908 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 15:27:37.67 ID:NaoIEEjs0.net] まあ、なんでポインタに拘るのかわからんが、 つうか、書きと読みでアクセス方法は合わせた方がいいと思うが、 動きゃいいかw
909 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 15:34:28.08 ID:rLWliBun0.net] 学習をし始めた頃は敢えてポインタを使っていろんな書き方を試してみるのもいいと思う。 数をこなすうちに自然とよい書き方に気づくと思う。
910 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 16:41:26.75 ID:iiKpFSsu0.net] 起動の度に外部ファイルで変数の初期値を変えて起動したいんだけどどうすんの?
911 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 16:53:41.42 ID:utzmEkdP0.net] 外部ファイルを読んで変数に代入する
912 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 17:06:30.45 ID:iiKpFSsu0.net] 外部ファイルに変数名と初期値を書いておきたい
913 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 17:11:49.57 ID:Qdw/5tAf0.net] 環境依存だし基本的に無理 バッチなりシェルスクリプトに記述しといてコマンドライン引数で渡す方が建設的
914 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 18:05:00.75 ID:m20yJ7cw0.net] ソースに書いてない変数を実行時に導入したいってのとは違うんでないか? あらかじめ外部ファイルで値を設定できる変数は決まっていて、 要するにリソースファイルみたいな使い方をしたいのかも知れん。 fscanf(fp, "%s=%d\n", varname, &varval); if (strcmp(varname, "width") == 0) { width = varval; } else if (strcmp(varname, "height") == 0) { height = varval; } else { fprintf(stderr, "cannot use variable '%s'\n", varname); } みたいな感じ? この場で書いてるから洗練されてないし、動くか怪しいけど。
915 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 18:08:18.57 ID:NaoIEEjs0.net] 人が読み書きしない前提なら、構造体の領域をまるまんま読み書きしてしまえば楽だぜ。
916 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 18:09:51.31 ID:4HKeVMJe0.net] 動作時に殆ど変えない値ならファイルで良いかもしれないが 起動の都度値を変化させたいなら、コマンドラインの方が良いぞ
917 名前:901 mailto:sage [2017/10/22(日) 18:29:59.97 ID:m20yJ7cw0.net] >>901 で使った「リソースファイル」って言葉は曖昧だったね。 「設定ファイル」の方が通りがよかったかも。 皆さん文脈から分かってくれると思うけど、 VisualStudio なんかで別の意味で使う言葉だし。
918 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 18:44:14.78 ID:IdeA6XVs0.net] 「鶏を割くに焉んぞ牛刀を用いん」とも言えるけど json,yaml,toml
919 名前:なんかの読み込みライブラリ使うとか Lua,Pythonを組み込むとかも一応回答としてはありかもね [] [ここ壊れてます]
920 名前:デフォルトの名無しさん mailto:sage [2017/10/22(日) 20:27:33.99 ID:Cn2ZDyn4d.net] >>888 つーか全部レジスタの方面の話じゃね? 大分前の話だが、DSPでそういうのがあった
921 名前:デフォルトの名無しさん mailto:sage [2017/10/22(日) 20:32:16.01 ID:EROQgIiX0.net] >>906 ファミコンとかで使われていた6502のゼロページレジスタ がそうだよ MELPS7700とか名前を変えて長いこと使われた
922 名前:デフォルトの名無しさん [2017/10/22(日) 21:19:51.70 ID:bXoG3HvV0.net] メインフレームでDIAGNOSEを使うときなんか WCSのアドレスを指定とかね
923 名前:デフォルトの名無しさん [2017/10/23(月) 01:07:16.21 ID:mBA7Qm4F0.net] スタック変数いらねえな グローバル変数で性能追求しようぜ
924 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 01:22:42.10 ID:gdiUlDLR0.net] 6502のゼロページが全部レジスタだと思い込んでるような記述がたまにあるけど 普通にメモリだよ
925 名前:デフォルトの名無しさん [2017/10/23(月) 01:37:37.69 ID:mBA7Qm4F0.net] オペランドを8bitに限定してコード効率上げるってのがゼロページの発想でしょ メモリ素子が高価な時代の涙ぐましい仕組みのひとつ
926 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 01:46:50.56 ID:EhEnOqp90.net] CPUの一時キャッシュメモリをレジスタ変数に割り当てる方が速いんじゃないか?
927 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 05:14:49.57 ID:u4PJ0rqa0.net] >>911 アドレス値のフェッチが1byteだけで済むから 16bit(2byte)の絶対アドレスより速い、てメリットもあるしね。 >>912 これはアリかも。 CPUにデカいキャッシュが載る時代のゼロページ的な使い方だな。
928 名前:デフォルトの名無しさん [2017/10/23(月) 05:45:57.83 ID:iFI38Dlw0.net] %%%%1000%%%% 000-[HUM%58*73.1\%]/2I/3NM/61.3SNMK%?%3%51.22222222222221% 001-[[[%6/4$17.6135412α3]]]]+DOM+SIL+7% 002-UML7%[61.2[31.5[!%32∂LM17.36%!16.3!%<<<%!HSTOL7%!Q!S!=3m=<2TOL<3Q9A<2.1GHz%,DOK,HAOARA, 003-[[[HEMLOT47[<\41.2%Q,===>[MLS<DPNO<\2.3>#ESOLA!5%!3MLA!>LTOSA>7TONSA>%>%end
929 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 17:06:19.86 ID:WoZMAj8B0.net] ルネサスRXなんかもレジスタがメモリマップされてるな アクセス禁止領域だけど
930 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 19:08:39.57 ID:Ob3tZ8JSM.net] SFRと汎用レジスタの区別が出来ない奴
931 名前:デフォルトの名無しさん [2017/10/23(月) 19:25:26.97 ID:nagTo3YF0.net] >>915 そこって、デバッガがCPUレジスタ参照する為の窓だから、プログラムがその領域指すと、デバッグが困難になるから禁止してるんじゃね?
932 名前:デフォルトの名無しさん [2017/10/23(月) 19:29:22.87 ID:nagTo3YF0.net] デバッガー専用の作業メモリー領域もプログラムから使用禁止だったりするだろ?
933 名前:デフォルトの名無しさん [2017/10/23(月) 19:30:14.37 ID:HemzWECS0.net] レクサスRXに見えた
934 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 20:21:25.70 ID:WoZMAj8B0.net] >>917 その通りだと思うよ
935 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 20:22:52.11 ID:WoZMAj8B0.net] >>916 sfrをアクセス禁止領域に置いてどーすんだよw
936 名前:デフォルトの名無しさん [2017/10/23(月) 20:30:23.77 ID:nagTo3YF0.net] >>921 アクセス禁止じゃねーよw 使用禁止だ。 デバッガー使わないなら好きに使えばいい。
937 名前:デフォルトの名無しさん [2017/10/23(月) 20:37:44.96 ID:nagTo3YF0.net] あ、レス間違えたわw
938 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 03:02:06.36 ID:75BFZUbG0.net] int i=1,n n=i/2*2 n=0になる理由教えてください
939 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 03:50:48.19 ID:senjN+vb0.net] int型は小数が扱えないので0方向に丸められる
940 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 05:57:30.66 ID:2rmlfNW20.net] >>924 https://ideone.com/HQ4Zos
941 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 06:48:50.75 ID:kt50Dt6N0.net] 負の除算の丸め方は処理系依存
942 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 07:33:37.46 ID:VjHIGh6G0.net] 左結合で i/2 の後に *2 が処理される 整数どおしの除算なので丸めが発生 丸めた値に 乗算が行われる
943 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 07:45:07.35 ID:75BFZUbG0.net] おおおお! なるほど!ありがとうございます!
944 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 12:07:36.73 ID:SPAXueit0.net] int func(int) は、引数が int 型で、int 型の値を返す関数 int func(void) は、引数が無しで、int 型の値を返す関数 というのは分かったのですが int func() のように () の中が空の場合は、どうゆう意味になりますか? int func(void) と同じ?
945 名前:デフォルトの名無しさん [2017/10/24(火) 12:12:42.21 ID:b8RDVE7X6.net] https://i.imgur.com/DWw6T08.png
946 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 12:24:20.33 ID:SPAXueit0.net] わかりました、ありがとうございます
947 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 12:51:09.78 ID:k+hUXLmG0.net] >>931 包茎手術じゃなくて脱毛で良かったな
948 名前:デフォルトの名無しさん [2017/10/24(火) 13:44:26.08 ID:/a/Ldfbw0.net] DMAでも使うならともかく レジスタをメモリ空間にマッピングする利点なんてないだろ
949 名前:デフォルトの名無しさん mailto:釣宣言 [2017/10/24(火) 13:58:10.44 ID:48RRVnNoM.net] PCI以降DMAでデータ転送なんてのは無い。 あるのはバースト転送モードだ。 当然、転送に必要なレジスタはメモリにマッピングされている。
950 名前:デフォルトの名無しさん [2017/10/24(火) 14:14:56.50 ID:gWGoT/ywp.net] >>934 むしろデメリットさえあるな。だからデバッガが使う以外は利用されてないだろ?
951 名前:デフォルトの名無しさん [2017/10/24(火) 14:24:36.56 ID:fybDUnFS0.net] ふふ、トヨ〇の要求。今は知らん。
952 名前:デフォルトの名無しさん [2017/10/24(火) 16:20:50.45 ID:b8RDVE7X6.net] まだやってたのかよレジスタ
953 名前:デフォルトの名無しさん [2017/10/24(火) 18:07:58.27 ID:gWGoT/ywp.net] 内部レジスタと外部レジスタは意味がまるっきり違うんだがなぁ
954 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 18:48:56.59 ID:ffssQfLj0.net] >>939 二重帳簿やっているように聞こえる
955 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 01:31:11.21 ID:a9TiLHl10.net] >>930 同じなんだけどコンパイル時の引数チェックをしなくなる。 int func(void) の関数に対して func(123) みたいにして呼ぶとコンパイルエラーだが int func() の関数に対して func(123) で呼び出す記述があってもエラーにならない。 なんでこうなっているのかというと、昔のCにはvoidがなくて引数なしの関数は int func() のように書くしか方法がなく、尚且つ昔のC言語は引数のチェックを していなかったため。つまり過去のC言語ソースをコンパイルできるようにする ためにこのような記述が残されている。今となっては余程の事がない限りこんな 書き方はしない方が良い。バグの元だ。
956 名前:デフォルトの名無しさん [2017/10/25(水) 15:47:29.67 ID:Ls3qnFv30.net] ヤフー知恵袋って色んな奴がC言語勉強してるやつがいるな、素人みたいな質問やら専門的な質問や大学の問題の質問やらのプログラミング質問が
957 名前:デフォルトの名無しさん [2017/10/25(水) 17:13:54.92 ID:3egWGIK90.net] >>941 へーへー
958 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 18:14:39.48 ID:2J1yyAIT0.net] https://ideone.com/0GCZnF がエラーになるのですが、 どうすればいいでしょうか?
959 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 18:15:57.84 ID:16XMr+7o0.net] DDOS攻撃してサイト毎潰す
960 名前:デフォルトの名無しさん [2017/10/25(水) 18:20:37.33 ID:Ls3qnFv30.net] >>944 まず何のプログラミングか言わなきゃダメでしょうみんなプロだから挙動で読めちゃう人いるけどさ
961 名前:デフォルトの名無しさん [2017/10/25(水) 18:28:36.51 ID:Ho4Id2OA0.net] >>944 printfでNULL->valueをしてるから
962 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 18:35:07.38 ID:2J1yyAIT0.net] >>946 >>947 hoge()でdata->valueに値をセットしたいです。 10を表示したいです。
963 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 19:06:17.58 ID:N2zX2Cru0.net] void hoge(data_t **data, int value) { *data = NULL; *data = malloc(sizeof(data_t)); if (data == NULL) return; (*data)->value = value; } 呼び出しを hoge(&data,10); これではどうか
964 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 19:07:10.40 ID:N2zX2Cru0.net] if (*data == NULL) return; ここ間違えた、訂正
965 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 19:12:01.89 ID:2J1yyAIT0.net] >>949 ありがとうございます。 できました!超天才!
966 名前:デフォルトの名無しさん [2017/10/25(水) 19:16:50.46 ID:Ho4Id2OA0.net] そういうことか 全然分からんかった 引数に受け渡されたポインタ変数のコピーに新しく確保したメモリのアドレス入れても呼び出し元のポインタ変数はなんも変化しないのか
967 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 19:21:03.77 ID:BohOgQqE0.net] 引数で int の変数を書き換えても 呼び出し元には伝わらない それの延長線 int を data_t* に読み替えれば同じ理屈よ
968 名前:デフォルトの名無しさん [2017/10/25(水) 20:39:40.86 ID:Ls3qnFv30.net] 俺の頭じゃあ理解できなかったわアロー関数は苦手だ、ここには天才がやっぱいるわ
969 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 22:59:11.01 ID:SHE9E59e0.net] この程度でプロとか天才とかw レベル低っ
970 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 23:31:22.55 ID:A9sEwxck0.net] 追い詰められてる時って、ちょっとしたことを見落としたりしがちだし。 そういうときにちょっとしたつまらない問題点を指摘してくれる人が神様に思えることはある。 本当に何でこれに気づかない?って問題に延々と気づかないことあるから。
971 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 01:05:20.57 ID:WmOJzpQL0.net] 実務の世界だと、開発リーダーにとっては、この程度はさらさらと書いて欲しいと思うだろうな この辺の考え方が理解できてないと、構造体を使ったリスト構造、木構造が作れないと思う
972 名前:デフォルトの名無しさん [2017/10/26(木) 01:22:11.08 ID:FPgm8C1h0.net] 急に語り出したぞ、おい
973 名前:デフォルトの名無しさん [2017/10/26(木) 03:22:11.49 ID:kwyo2eDl0.net] リスト構造、木構造という言葉がわからなかったのかな?
974 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 03:35:02.17 ID:ByFyiJTd0.net] 分からなくてもググれば速攻定義出ますがな
975 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 06:24:41.35 ID:8UQnYlEC0.net] >>944 からの流れだとすると、実務で使う人とは感じなかったな。 専門外の学生さんが単位を取るために四苦ハック、 進級できたら思い出しもしない、という立場からの質問だろうと。
976 名前:デフォルトの名無しさん [2017/10/26(木) 10:26:24.17 ID:Z8IKw2VS6.net] リスト構造木構造とか理系大学の情報系科目で誰でもやるがな こんなところ見てる奴が知らんわけないだらアホ
977 名前:デフォルトの名無しさん [2017/10/26(木) 10:46:18.77 ID:DmfMCHFwp.net] リストもツリーも基本の構造は一緒だろ。 ただ、鎖ね繋がってる数が違うから、 扱いが違うだけでな。
978 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 12:26:11.84 ID:nuX2FTeTa.net] 文系経済学部ですわ
979 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 12:46:06.22 ID:oyaJ8gC3M.net] >>962 > こんなところ見てる奴が知らんわけないだらアホ >>952 みたいな奴もいるのに何を言ってるんだよ w
980 名前:デフォルトの名無しさん [2017/10/26(木) 12:51:34.13 ID:jbwuNtau6.net] >>965 リスト構造とか知ってるからってポインタ受け渡しのトリックに気付くとは限らんだろ
981 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 13:41:10.56 ID:VaLFaSbf0.net] 怪しくなったら戻り値で返せ
982 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 14:50:55.37 ID:ujDNQjK/M.net] そういうときに限って二つ返したくなる
983 名前:デフォルトの名無しさん [2017/10/26(木) 18:29:14.01 ID:l+WAoJAx
] [ここ壊れてます]
984 名前:0.net mailto: 自分の知ってる関数解ってる宣言の仕方ならわかるけどさ解らない奴使ってたらもう変数が動いてるかわからんだろう そうなったらもう謎でコードなんか読めないだろ? [] [ここ壊れてます]
985 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 18:40:00.02 ID:6866r+hk0.net] んなこたぁ、ない
986 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 18:44:09.81 ID:AI1MxGuX0.net] 引数の書き戻し系は 渡すときに値を必要としてるのかどうかは仕様次第なので 少し気を使う
987 名前:デフォルトの名無しさん [2017/10/26(木) 20:03:01.42 ID:DmfMCHFwp.net] それより、そのアドレスはアクセス権のある場所を指してるんだよな?
988 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 21:41:04.91 ID:oyaJ8gC3M.net] >>966 レベルの問題 > リスト構造とか知ってるからってポインタ受け渡しのトリックに気付くとは限らんだろ そんな奴がいないとは言わないがそう言う奴はごろごろいるとは思えないだろ
989 名前:デフォルトの名無しさん [2017/10/26(木) 21:42:34.03 ID:Fjma9sq90.net] とりまリスト構造なんて誰でもしってること >>959 のレスはイミフ
990 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 03:11:40.50 ID:QY+Fa/Ak0.net] >>966 これはトリック、か?
991 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 06:49:46.56 ID:VPed4ksO0.net] 「関数の引数に値渡ししかないから、 ポインタを渡すことで呼出側の変数の内容を関数側で変更する」 というのが他の言語と比較した場合、C特有のトリックと呼べるかも。 もちろん、Cの村では当然かつ基本のことだけど。
992 名前:デフォルトの名無しさん [2017/10/27(金) 08:36:39.71 ID:JYNAFOfl0.net] たくさん値を返したいなら、 戻り値を型宣言した構造体にしたらいい。
993 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 09:39:08.11 ID:a5gmSSmH0.net] 残念だったな、トリックだよ
994 名前:デフォルトの名無しさん [2017/10/27(金) 09:42:57.69 ID:Q7q08ysx0.net] >>977 autoでもできるのですか?
995 名前:デフォルトの名無しさん [2017/10/27(金) 09:57:16.24 ID:CUGbjFhkp.net] ああ、昔はauto変数に取った構造体を戻り値にして割り込み系で散々な目に遭ったよな。 あれは言語仕様に沿って無いコンパイラが悪いんだがな。
996 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 10:00:31.70 ID:v/FEPkkV0.net] 古いコンパイラではNGだったけど 構造体の引数での値渡し、戻り値での値戻しは可能
997 名前:デフォルトの名無しさん [2017/10/27(金) 10:18:09.15 ID:CUGbjFhkp.net] 古くなくてもニッチな環境では要注意だ。 コンパイラの吐き出すコードが言語仕様に沿って無い場合がある。
998 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 10:27:32.22 ID:8fSPZcAJ0.net] >>976 トリックと言うか他の言語ではコンパイラがやってることをアセンブラやCでは明示的に書くと言うだけ
999 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 13:06:16.96 ID:v/FEPkkV0.net] >>982 なんてこったw ニッチな環境だとメンテもされてないことあるだろうしねー
1000 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 15:36:47.12 ID:dGyUnw2Y0.net] ホワイトスミスなんて、printfすら無いような処理系作って いた人がANSIの役員していて2度びっくり
1001 名前:デフォルトの名無しさん [2017/10/27(金) 18:41:59.37 ID:BvMxy0d+0.net] C言語のポインタで int *a; int b; a = 10; これは理解できるんだけど a = &b; *a = 10; これはどうなってるん?aにアドレス入ってるのにどうやって10を送ってるん?
1002 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 18:47:48.96 ID:/LUCvRWS0.net] > int *a; > a = 10; > これは理解できるんだけど 説明できるのなら その先も分かるはず
1003 名前:片山博文MZ mailto:sage [2017/10/27(金) 18:49:13.82 ID:xRxq9X9wd.net] >>986 > int *a; > int b; > a = 10; //エラー。ポインタに整数は代入できない。そもそも全角文字と半角文字を間違っている。 > a = &b; > *a = 10; アスタリスク(*)で実体の整数データを手繰り寄せているイメージね。
1004 名前:デフォルトの名無しさん [2017/10/27(金) 18:55:00.02 ID:BvMxy0d+0.net] >>988 *aで中にあるアドレスで探って送ってるイメージ?
1005 名前:片山博文MZ mailto:sage [2017/10/27(金) 18:57:22.58 ID:xRxq9X9wd.net] うん。アスタリスクを付ければ、アドレス先への代入になる。 ポインタにゼロ以外の整数は代入できないに訂正。
1006 名前:デフォルトの名無しさん [2017/10/27(金) 19:14:00.54 ID:CUGbjFhkp.net] 宣言とフィールドで意味の違う*が悪い。
1007 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 19:16:29.79 ID:t/XrhBpFM.net] アーキテクチャとアセンブリ言語勉強するのが早道な気がする
1008 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 19:19:35.75 ID:t/XrhBpFM.net] >>991 意味は同じだよ。*aがintだと宣言してるから整合してる。 初期化構文がちょいと怪しいが。
1009 名前:デフォルトの名無しさん [2017/10/27(金) 19:21:42.60 ID:CUGbjFhkp.net] >>993 宣言ではポインタである事を表すが、 フィールドでは、掛け算記号だったり、ポインタの内容だったりするだろ?
1010 名前:デフォルトの名無しさん [2017/10/27(金) 19:56:47.39 ID:BvMxy0d+0.net] char *c; int *a; この二つはポインタだけど使い方が違うのか?
1011 名前:片山博文MZ mailto:sage [2017/10/27(金) 20:00:41.33 ID:xRxq9X9wd.net] sizeof(*c) == sizeof(char)で、 sizeof(*a) == sizeof(int)だ。
1012 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 20:11:43.60 ID:HlvRN0vUF.net] Cの文法特にポインタ宣言周辺は、 頭が悪いと読めないよう定められてる。 ソフトウェア開発は馬鹿でも手伝わせる 必要があるくらい人手不足なのに、 なんでこんな文法にしたのか不思議。
1013 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 20:21:32.42 ID:3Ly7XcHr0.net] えっ、Cの由来を知らないの?
1014 名前:片山博文MZ mailto:sage [2017/10/27(金) 20:26:24.89 ID:xRxq9X9wd.net] 次スレお願い
1015 名前:あぼーん mailto:あぼーん [2017/10/27(金) 21:22:14.66 ID:zFbk1AXy0.net] あぼーん
1016 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 78日 1時間 0分 51秒
1017 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています