X



C言語なら俺に聞け 144
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 838a-3nWA)
垢版 |
2017/12/23(土) 19:33:43.89ID:dghfoRy20
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


http://mevius.5ch.net/test/read.cgi/tech/1509107288/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0052デフォルトの名無しさん (エーイモ SE8a-/kWs)
垢版 |
2017/12/30(土) 17:36:17.08ID:QxhO3HdGE
先輩方また教えてください
int 
hoge(int a,
_____int b)
{
____return a + b;
}

_は半角スペースだと思ってください。
こんな感じでintとhogeを別の行に書いたり
int aとint bも別の行に書いたり
こういう書き方をよく見るんですがどうしてこう書くんでしょうか?
C言語ではこういうルールがあるのでしょうか?
0053片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe)
垢版 |
2017/12/30(土) 17:46:47.07ID:jArhle36d
それはコーディングスタイルとか、コーディングルールとかいうけど、会社や組織によって違う。
制御構造の構造を明確にするために、「インデント」したり文字の位置を揃えたりする。
まあ、初心者ならANSIスタイル使っておけば無難かな。
0056デフォルトの名無しさん (ワッチョイ 0b9f-RYVm)
垢版 |
2017/12/30(土) 17:52:13.74ID:Xyp0qNcm0
>>52
> こういう書き方をよく見る
嘘つくな。
というか、本当にそう思うのなら見るべきソースを間違っている。

いずれにしても、初心者がその手のコーディングスタイルについて考えるのは完全に時間の無駄だから、
どれでもいいから有名なコーディングルールを読んで、それを使うようにしろ。
お前が今読んでいるそのコードに対して追加/修正が求められているのなら、
グダグダ言わずにそのスタイルで書け。

繰り返すが、初心者がコーディングスタイルにこだわるのは全くの無駄だから、止めろ。
君が入門書を読んで勉強しているのなら、その本のスタイル通りに書け。
初めはそれでいい。
0058片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe)
垢版 |
2017/12/30(土) 17:53:57.97ID:jArhle36d
C言語では文字列以外の空白はほとんど無視されるから、処理を一行に長〜く書くことが
できるけど、それでは人間には分かりにくいし、読みづらい。
0060デフォルトの名無しさん (スッップ Sdea-7LGL)
垢版 |
2017/12/30(土) 18:16:52.49ID:l+pzRLn8d
>>52
たまーに引数が多くて読みずらい関数とかをメンテするハメになったときに、コメントつけるためにやる程度。

例のような短いのでそんな事になってたら、元担当見つけて小一時間問い詰めろ。
0062デフォルトの名無しさん (アウアウカー Sacb-9mWg)
垢版 |
2017/12/30(土) 19:19:44.15ID:bLWDJrONa
>>52
人間が見る時の見易さのためだけにそう書いているのがある。言語としての決まりはない。
C言語で改行に意味があるのはダブルクォーテーションで括った文字列内とプリプロセッサが処理する#で始まる行ぐらいだ。
0063デフォルトの名無しさん (ワッチョイ ff89-OTe3)
垢版 |
2018/01/03(水) 19:26:04.56ID:AMJZwzU90
         ,,-―--、
        |:::::::::::::;;;ノ  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        |::::::::::( 」 <見るべきソースを間違っている。
        ノノノ ヽ_l   \______________
       ,,-┴―┴- 、    ∩_
     /,|┌-[]─┐| \  (  ノ
      / ヽ| |  バ  | '、/\ / /
     / `./| |  カ  |  |\   /
     \ ヽ| lゝ    |  |  \__/
     \ |  ̄ ̄ ̄   |
      ⊂|______|
       |l_l i l_l |
       |   ┬    |
0070デフォルトの名無しさん (ワッチョイ 3b89-2A+B)
垢版 |
2018/01/05(金) 11:52:20.32ID:e4FSU8sj0
char *p="aiueo"; //これが通るのは必要悪
const char *p="aiueo"; //本来こうであるべき
*(p+3)='\0'; //constついてりゃ並みのアフォなら気付けるはず
0073デフォルトの名無しさん (ワッチョイ 1fd6-2A+B)
垢版 |
2018/01/05(金) 17:54:32.46ID:SpC7EOR80
>>71
ブーメランおいしい?www
0074デフォルトの名無しさん (アウアウカー Sa4f-dSb4)
垢版 |
2018/01/05(金) 18:07:43.83ID:T2NhU/kFa
そういや前にどこにconst入れるとどこが定数扱いになるか色々やって調べたことあるなあ。
0076デフォルトの名無しさん (アウアウカー Sa4f-dSb4)
垢版 |
2018/01/05(金) 19:10:23.97ID:T2NhU/kFa
まあしかしコンパイラには char *p = "..."; の宣言で *p に書き込みアクセスするような記述を見つけたら警告ぐらい出して欲しいところだな。
実際に(少なくともデフォルトでは)動かないコード吐くわけだし。
0080デフォルトの名無しさん (ワッチョイ 1fd6-5YeV)
垢版 |
2018/01/06(土) 08:11:50.88ID:9HgF2CnS0
>>79
ISO/IEC 9899:2011 A.2.2に書いてあるんだが、おまえさんには見えないのか?

7.3) type-qualifier:
const
restrict
volatile
_Atomic

7.6) pointer:
* type-qualifier-listopt
* type-qualifier-listopt pointer

7.6) type-qualifier-list:
type-qualifier
type-qualifier-list type-qualifier
0082デフォルトの名無しさん (アウアウウー Sa8f-hL1C)
垢版 |
2018/01/06(土) 16:50:26.91ID:Dhtt7sCWa
あ、こういう問題作れるね。

・ それぞれの違いについて説明せよ。

const char **p
char const **p
char * const *p
char ** const p
char * const *p
char * const * const p
char const * const * const p
char const ** const p
0083デフォルトの名無しさん (ワッチョイ 4b9f-Ogju)
垢版 |
2018/01/06(土) 18:52:18.14ID:0jo5cy8h0
>>82
悪問だけどな。結局の所、
・constは複数回指定できる
・constの右側の固まり全体が定数と見なされる
だけだし。逆に言えば、それらを別物/良問として認識するような奴は上達しないのだと思う。
(記憶の前処理としてabstractionする癖がない)

だからこれまでそんな馬鹿げた問題を出す奴はC界隈には居なかったし、今後も多分そうだ。
CodeIQの広告でその手の問題をよく見るが、あれじゃ「馬鹿です」と自己紹介して居るも同然だし。
まあ所詮リクルート(コード書いてない連中)だからそんなもんだが。
とはいえ、何らかのテストで簡単にそいつの実力を把握できる事が出来るのなら、役立つのも確かだが。

そしてそれ以前にconstが大して役に立たないからなあ。
0089デフォルトの名無しさん (ワッチョイ 9fb3-TPPA)
垢版 |
2018/01/06(土) 20:49:46.88ID:A2dnXNCo0
>>82
1: const char **p
2: char const **p
3: char * const *p
4: char ** const p
5: char * const *p
6: char * const * const p
7: char const * const * const p
8: char const ** const p

1と2、3と5は同じ
char **pとchar const * const *pのパターンがない

こういう奴はプログラマーに向いてない
0090デフォルトの名無しさん (ワッチョイ 0b9f-hL1C)
垢版 |
2018/01/06(土) 21:08:00.94ID:BwjYxRoc0
キリッ
0091デフォルトの名無しさん (ワッチョイ 4b9f-Ogju)
垢版 |
2018/01/06(土) 22:07:37.32ID:0jo5cy8h0
>>87
例外ではない。
char部分はCでは常にcons扱い(=int等に変更できない)だから
constが修飾する対象に仕様上なり得ないだけ。
だからその2つは結果的に同じ意味になる。

というかCは文法例外はほぼ無いはず。
0093デフォルトの名無しさん
垢版 |
2018/01/07(日) 06:32:55.29
自分流に解釈して覚えるのはいいけど、それが世界の真実かのように講釈するのは恥ずかしいから控えた方がいいよ
まあこのスレではいいけど、リアルの人間関係では陰で馬鹿にされるだけだよ
0094デフォルトの名無しさん (ワッチョイ 0bbb-2A+B)
垢版 |
2018/01/07(日) 19:53:30.95ID:8XJu4dlo0
>>91
charがintに変更できないのがconstだからだと?
おまえさん char c; *(int*)&c = 1; が許されないことと勘違いしているのか?
0095デフォルトの名無しさん (ワッチョイ 0bbb-2A+B)
垢版 |
2018/01/07(日) 19:54:10.54ID:8XJu4dlo0
いかん、間違えた
おまえさん char c; (int)c = 1; が許されないことと勘違いしているのか?
0096デフォルトの名無しさん
垢版 |
2018/01/07(日) 20:44:34.88
ほらね、共通語をしゃべらないから話が発散する
0098デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 15:27:35.06ID:u4QX+fVn0
>>97
当たらずといえども遠からず
自分で言ってて無理を感じるなら
それが正解だ
0099デフォルトの名無しさん
垢版 |
2018/01/08(月) 15:31:40.17
>>97
んなこたあない
>>94の書いてるコードと同義で、cの先頭アドレスからint分の領域に代入するだけで、cを拡張したり戻したりしてるわけではない
gcc 3.xやVC++2008では通ったが今のgccではコンパイルエラーになる記法
0101デフォルトの名無しさん (ワッチョイ 2bb3-RrJ/)
垢版 |
2018/01/08(月) 16:09:19.72ID:eKvnY0O/0
(int)cって右辺値じゃないの?
0102デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 17:43:28.20ID:u4QX+fVn0
>>101
そうだよ
だけど一部の(まずいことに大手の)コンパイラが
左辺値としての用法を古くから許していた
0105デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 19:03:01.62ID:u4QX+fVn0
若造が見たことないのは仕方ないよ
活発に議論されていたのがC89制定を目指していた頃のことだから
0108デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 19:26:48.32ID:u4QX+fVn0
>>106
一児の父だが孫はまだいねえよ
0109デフォルトの名無しさん (ワッチョイ 4b9f-Ogju)
垢版 |
2018/01/08(月) 19:45:48.59ID:8LuLzpAV0
>>107
例外じゃないって立場は俺しか居ないのか?
その場合、お前らはこれを整合性よく説明できない馬鹿共だということになるが、それで良いか?

逆に考えてみろ。
君がそれを「例外」だとしているのなら、つまり「例外」でなければ君は
const <type> *p = ... // (A)
<type> const *p = ... // (B)
で意味が違うべきだというわけだ。
その場合、それぞれどういう意味と捉えるべきだと考えるのか、言えるか?
0111デフォルトの名無しさん (ワッチョイ 9fb3-TPPA)
垢版 |
2018/01/08(月) 20:23:19.52ID:7hYpzMEE0
こんなの決め事なんだからもしそう言うのがあったとしても
> その場合、それぞれどういう意味と捉えるべきだと考えるのか、言えるか?
は、作った奴に聞くしかないだろ
0112デフォルトの名無しさん
垢版 |
2018/01/08(月) 20:24:38.73
例外でもなんでもなく、単にC言語の標準規格がそうなっているからとしか言いようがないけどな。

宣言指定子 (declaration specifier) は以下の3要素から構成されている (順不同)。
・記憶クラス指定子 (storage class specifier) : auto, register, static, extern, typedef
・型指定子 (type specifier) : void, char, short, int, long, float, double, signed, unsigned, struct/union指定子, enum指定子、typedef名
・型修飾子 (type qualifier) : const, volatile

ポインタ宣言子 (pointer) は以下の2要素から構成されている。
・*
・型修飾子 (type qualifier) リスト

いろいろ省略してるので細部は不正確かもしれないがC89ではだいたいこんな感じ。
参考: C11のYacc文法 http://www.quut.com/c/ANSI-C-grammar-y.html

で、なぜそうなっているかを自分流に解釈して自分の中で整合性を取るのはいいけど、それを他人に押しつけるなってことだね。
0113デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 20:24:45.15ID:u4QX+fVn0
ちゃんと理詰めで理解できるやつもいれば
暗記するしかないやつもいる

世の中、人それぞれだな
0114デフォルトの名無しさん
垢版 |
2018/01/08(月) 20:39:32.52
>>113
別に太陽が地球の周りを公転していると解釈してもいいんですよ?
結果さえ合っていればね。
ただその自分流の解釈を他人に講釈したら恥をかきますよって話。
0116デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 21:18:47.34ID:u4QX+fVn0
             「 ̄ `ヽ、   ______
             L -‐ '´  ̄ `ヽ- 、   〉
          /           ヽ\ /
        //  /  /      ヽヽ ヽ〈
        ヽ、レ! {  ム-t ハ li 、 i i  }ト、
         ハN | lヽ八l ヽjハVヽ、i j/ l !
         /ハ. l ヽk== , r= 、ノルl lL」
        ヽN、ハ l   ┌‐┐   ゙l ノl l
           ヽトjヽ、 ヽ_ノ   ノ//レ′
    r777777777tノ` ー r ´フ/′
   j´ニゝ        l|ヽ  _/`\
   〈 ‐ 知ってるが lト、 /   〃ゝ、
   〈、ネ..         .lF V=="/ イl.
   ト |お前の態度が とニヽ二/  l
   ヽ.|l         〈ー-   ! `ヽ.   l
      |l気に入らない lトニ、_ノ     ヾ、!
      |l__________l|   \    ソ
0118デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 21:43:42.37ID:u4QX+fVn0
無知なやつには
恥をかかせるよりも
教えないことが最も堪えるからな
0120デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 21:51:24.43ID:u4QX+fVn0
悪党の泣き声は言い響きだ
何を教えるつもりなのか聞き出したいんだなあwww
0122 ◆QZaw55cn4c (ワッチョイ 1f60-1EiW)
垢版 |
2018/01/08(月) 21:58:13.44ID:F+Qn6y7R0
正直なところ

const int x

int const x
は同等、

というのは、決め事でいいと思うよ、何もかも原理原則で理解できる(までに細かくパースできる)人にはどうでもいいのかもしれないが。

‥えっと、細かい人にとって、この場合どうでもいいのか、どうでもよくないのか、どっちだったっけ??
0124デフォルトの名無しさん (ワッチョイ 8ba8-15OS)
垢版 |
2018/01/08(月) 22:04:03.83ID:t4bSGeIh0
同等も何も、修飾する主体が変数だけなんだから、何をどう変えろと?
対象がポインタなのかポインタの内容なのかって話に意味の無い例を挙げてどうしたいんだ?
0125デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 22:17:28.76ID:u4QX+fVn0
収穫ゼロ
 ざ ま あ www
0126デフォルトの名無しさん (ワッチョイ 4b9f-Ogju)
垢版 |
2018/01/08(月) 22:43:40.28ID:8LuLzpAV0
>>116
>>125
禿同

というかいい加減、知らない奴が煽るとか止めろよドアホ共。それは長期的にスレを毀損する。
なお、俺は知っている奴が馬鹿を糞味噌に貶すのを止めはしない。
馬鹿なこと言わなきゃいいだけだし、
逆に、これが出来ないのがID制フォーラムが腐る原因だと思っているから。

ヒントは既に書いたし、それ以前にC流の文法解釈をすれば特段不自然でもないし。
「例外」だと言いつつ(A)≠(B)を妥当とする根拠もないのはただの自己矛盾だと気付け。
そしてK&RはCの作者によって書かれているんだが、それも知らないのか?
Cしかなかった昔ならともかく、今お前らみたいな馬鹿がCやる理由は無いと思うんだがなぁ。
0127デフォルトの名無しさん
垢版 |
2018/01/08(月) 23:14:54.65
>>126
で、K&Rのどの記述からconstに関する解釈(constの右側の固まり全体が定数と見なされる)を読み取ったの?
0128デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 23:16:56.57ID:u4QX+fVn0
K&Rにconstはねえな
constの設計は髭と禿の合作だが
0130デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 23:28:56.73ID:u4QX+fVn0
おまえの手元のK&RってISBNはいくつだ?
0131デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 23:40:40.21ID:u4QX+fVn0
眠い・・・落ちるぞ
0134デフォルトの名無しさん (アウアウカー Sa4f-dSb4)
垢版 |
2018/01/09(火) 09:57:35.67ID:2pt0JvoIa
人の事はどうでもいい。Cの話を書け。
0136デフォルトの名無しさん (ワッチョイ 0bf6-5YeV)
垢版 |
2018/01/09(火) 10:17:45.46ID:BapSTNU/0
constがないK&Rが本のことだと思ったアフォはもう死んじまったのか?
0138デフォルトの名無しさん (ワッチョイ 0f8a-jAz5)
垢版 |
2018/01/09(火) 13:34:20.42ID:IJNuACex0
プログラミング言語Cの第2版(白本)は初版(緑本)と違ってANSI規格準拠
型修飾子や型指定子の項目にconstは存在する
というかconstとvolatileはANSI標準で新設されたものと明言されてる
一般には同一著者なので第2版まで含めてK&R本と呼ばれているから紛らわしい
0143デフォルトの名無しさん (ワッチョイ 0bf6-8O7H)
垢版 |
2018/01/09(火) 21:51:12.35ID:BapSTNU/0
        ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆
      ∧_∧ | |         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   )| |_____    ∧_∧   <  おらっ!出てこいOgju
     「 ⌒ ̄ |   |    ||   (´Д` )    \___________
     |   /  ̄   |    |/    「    \
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |
0145デフォルトの名無しさん (アウアウカー Sa4f-dSb4)
垢版 |
2018/01/10(水) 15:34:00.74ID:Y4Jjv91Na
つまり君は愛を求めてここに来たんだね。
0147デフォルトの名無しさん (ワッチョイ 4f23-ldot)
垢版 |
2018/01/10(水) 18:12:49.28ID:b0jd81470
openじゃなくてfopenみたいに、ファイルの存在確認のaccess関数に
対応するちょっと上位の標準関数ってある?
0148デフォルトの名無しさん (アウアウカー Sa4f-dSb4)
垢版 |
2018/01/10(水) 18:24:05.75ID:lfXyh+0pa
>>147
stat()とfstat()なんかどうだ?

まあでもopen(), fopen()の関係とは違うけどな。
open()はシステムコールだがfopen()はライブラリ関数だ。
(UNIX系OSの話ではあるが)。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況