• ベストアンサー

cの記述はかなりアバウトでもいいのでしょうか?

cの記述で例えば <の 次にスペースを1個入れようが、入れまいが、動くことがあります。普通スペースが入った時点で、区切りがはいった、と認識するものが多いのに、かなりアバウトに感じました。  これは、c++を試してみた時に良く感じました。逆に、c++の場合は、スペースは入るものと、入らないものとを、シビアに区別しているように、思いました。  cの場合は、スペースのとり方を c++とはどのように違っているのでしょうか?  曖昧なまま、いい加減な、スペースの とり方をしていたので、この辺のところを おしえていただけませんか!cについてでお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 C言語は「フリーフォーマット」と呼ばれるソース記述形式だ。  具体的に言うと、「トークン」と言うワードがあり、「スペース」という物でトークン同士を区切っている。この「スペース」とは、キーボードでスペースバーを押した時のいわゆる半角スペースのみならず、タブ(ASCIIコード0x09)、改行(0x0dか0x0aかその組み合わせ)も含まれる。ちなみに半角スペースはフリーフォーマットでは「ホワイトスペース」と言い、ASCIIコードの0x20だ。 トークンには識別子と演算子があり、識別子と演算子、または演算子同士は基本的にスペースを入れなくても良い。正確には、「トークンとして切り出せた」時点で、次の「トークン」までにスペースが無くて良くなる。 C++との違いは良く分からんなぁ。確かにC++ではテンプレートなどの機能が言語仕様として追加されているし、ポインタ演算(*)やアドレス演算(&)の取り扱いが変わっていたと思うが、普通にコードを組む際にはほとんど気にしなくて良いと思うけど・・・・これは私が基本的な組み方しかしてないからかも。  この辺の話は、やはりコンパイラを作る、というキーワードで情報を探した方が良いだろう。 ・コンパイラコンパイラ ・字句解析、lex ・構文解析、yacc などで検索してみたら色々見つかるのではないかな。

koro5917
質問者

お礼

一応 <正確には、「トークンとして切り出せた」時点で、次の「トークン」までにスペースが無くて良くなる。> ということですね!  よく分かりました。 「フリーフォーマット」の形式が色々あるようですが、基準を設定されたようで、分かりやすいです。  ありがとうございました。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>cの記述で例えば <の 次にスペースを1個入れようが、入れまいが、動くことがあります。 基本的にC++でも一緒です。#1の方のとおりフリーフォーマットですから。 ただし、C++の場合はテンプレートの引数でテンプレートを使うときに>をつなげて書くとコンパイラが>>演算子と判断するので、間にスペース等を入れる必要があります。

koro5917
質問者

お礼

c++では、度々、動かないので、テキストのスペースの取り方を 正確にまねして、気が付いたのでした。  でも、cとまったく、同じ、扱いで書いたのですが、なぜか 動きませんでした。勿論ご指摘の ( >をつなげて書くとコンパイラが>>演算子と ) のようなことはしていません。  まぁ  c++の方は 先の話なので いま、納得する必要もありません。  ありがとうございました。

関連するQ&A

  • 【C++】行列データの読み込み

    C++でテキストファイルに以下のようにカンマ区切り(例なのでスペース等でも構いません)で記述された行列を2次元配列に格納する方法が分かりません。 例 1,2,3 4,5,6 7,8,9 よい方法があればご教授願います。

  • C言語、この場合の記述の仕方

    次の問題をどのように記述すればいいのかわかりません。 ・任意の整数を3つ入力して、その中から最大値だけを出力するプログラムを書け。 ex) 3 6 9 と入力した場合 最大値9 問題文からして if を使うのだと思うのですが、 いまいち想像ができません。 #include <stdio.h> int main() { ここから下の書き方がわかりません。 3つの整数を出力しろっていうことだから int a,b,c; のように最初に3つ記述すればいいのでしょうか? また、「最大値のみ表示する」という風にするには どのように記述すればいいのでしょうか? 2つなら if、else でなんとかできるような気がするのですが3つとなると・・・ 全然イメージが沸いてきません・・・。

  • VBAの記述の中で半角スペースで区切らなければいけない時、区切ってはい

    VBAの記述の中で半角スペースで区切らなければいけない時、区切ってはいけない時を教えてください。 以下は参考書のとうりに記述しました。 ------------------------------------- Sub 分割() 氏名 = Range("A2").Value 姓 = Left(氏名, 2) 名 = Mid(氏名, 4, 10) Range("B2").Value = 姓 Range("C2").Value = 名 End Sub ------------------------------------- ・氏名 = Range ・Left(氏名, 2) ・姓 = Left ・名 = Mid ・氏名, 4, 10 半角スペースは無しで記述を入力したのですが 上記の    = の前後と   2 と 4 と 10 の前に 勝手に半角スペースが入りました。 試しに Range("C2")の Range と ("C2") の間に半角スペースを入れようと Range ("C2")とすると 強制的に排除され Range("C2") に戻されました。 試しに 氏名 = Range("A2").Value の「.Value」の前に半角スペースを入れて 氏名 = Range("A2") .Value としたら記述が赤字になって エラーメッセージが出ました。 試しに Range("B2").Value = 姓 の Range の部分でRとaの間に半角スペースを入れて  R ange と記述したら確定されました。 (強制的に戻らないのでしょうか?  またエラーメッセージが出ないのでしょうか?) 1.記述の中で半角スペースを入れなければならない所。 2.記述の中で半角スペースを入れてはいけない所。 3.入力してはいけない所に半角スペースを入力した場合エラーと表示される時。 4.入力してはいけない所に半角スペースを入力した場合エラーと表示してくれない時。 5.半角スペースが必要な部分に自動で入力してくれない時。 6.半角スペースが必要な部分に自動で入力される時。    上記4種類の定義を教えていただきたいです。 NO.4とNO.5は実害があります。 NO.3とNO.6は実害はないのですが理屈を知らないので、 NO.1とNO.2を知っていないと駄目ではと思いました。 参考書では見当たりませんでした。 わかりやすいサイトがあったら教えていただけるとありがたいです。 お願いします。

  • エクセルVBAの記述について

    OSはWin98、エクセル2000です。 次の処理をVBAで処理したいのですがうまく作動しま せん。 ご教授願います。 セルA1から下に向かって1から20までランダムに数 値が入ってます。 同じ数値は無く、数値も3行(セルA3)で終わる場合 も有ります。 この場合セルC1から下に向かって順にA1&A2、A 1&A3と記述したいのですが・・・ 例) A1に5、A2に7、A3に15、A4に10でしたら C1に57、C2に515、C3に510、C4に715 C5に710、以下・・・と記述 よろしくお願いします。m(_ _)m

  • for文で変数に格納される文字列 (Bシェル)

    シェルの記述に関しての質問です 例えば、 a1 b1 c1 a2 b2 c2 a3 b3 c3 a4 b4 c4 ・ ・ ・ というスペース区切りの配列が書かれたリストファイル(test.lst)を for VAR in `cat test.lst` do set $VAR echo $1 echo $2 echo $3 done という形で処理しようとします。 そうすると、$VAR に入る変数は "a1" や "b1" といった感じで行単位ではなく、スペース区切りで入ってきてしまい、 $2 や $3 はnullになってしまいます。 これを行単位で $VAR という変数に代入する方法はありますか? 区切り文字はスペースのままとします。 宜しくお願いします。

  • 国立二次試験の記述について

    以前も数学に関して質問させていただいたのですが、新たに疑問が浮かんだのでよろしくお願いします。 数学の記述で枠なしのまっさらな解答用紙が2枚なのですが、2つ疑問が浮かびました。 1.大問の中の小問をやってて運悪く1枚目で書ききれなかったときに、その小問の続きを2枚目に書いても良いのでしょうか?あまり形が良くないと思うのですが。 2.例えば大問は3題や4題の小問から構成されることが多いのですが、ほぼ(3)(4)のほうが難しくなっています。そういう場合、もちろん止まってるわけにはいかないので、大問【1】は飛ばして次の大問【2】に進むと思うのですが、その場合【1】の(3)(4)の部分の回答スペースは空けておくべきでしょうか?実際飛ばして進めていって大問【5】まで解いた後に【1】の(3)(4)の解法に気づいて後ろに書くのは非常に形が悪いと思うんです。ですが、その解けなかった(3)(4)にどれほどの回答スペースを要するかはもちろん全く検討もつきません。 ぜひアドバイスお願いします。

  • Cの関数をC++とCのどちらからでも呼べるようにするには?

    お世話になります。 環境はVC6.0となります。 C++で作成したプログラムから、Cで作成したDLLを呼び出す場合、DLL側のプロトタイプ宣言に「extern "C"」を付加する必要があると認識していますが、 呼び出し側がC++かC言語が分からない場合、Cで作成するDLLにはどのように記述するのが一般的(標準的)でしょうか? ちなみに調べてみたところ、 以下のように、「__cplusplus」でくくる方法もあるようですが、C++の標準仕様ではないとの記載がありました。 #ifdef __cplusplus extern "C" { #endif int function(int num); int function2(int num); int function3(int num); #ifdef __cplusplus } #endif よろしくお願いします。

  • C(コンビネーション)

    六人の生徒がいる。次のようなわけ方は何通りあるか。 〔1〕A、B、Cの三つに分ける 〔2〕二人ずつの三つに分ける という問題で、1の場合は コンビネーション6の2×C4の2×C2の2=90通り となり2の場合は 90÷6=15となりますよね。 なんでコンビネーションで分けると自動的に組が決まっている(AとかBとかCとか)のかが分かりません。 そもそもコンビネーションって、N個の中からR個取り出して一組とするってことは、組に区別なんかないんじゃないかなぁって思うんですけど。。。教科書や参考書を見てもどうもよくわからなくて困っています。どなたかお願します。

  • 秀丸上から別ファイルを開かせたいがフルパスの記述ができない

    初めてこのサイトを利用させていただきます。 秀丸というテキストエディタについて質問です。 【やりたいこと】 画像ファイルやHTMLファイルなどのフルパスを秀丸で開いたテキストファイル上に記述し、 そのフルパスをダブルクリックすればその別ファイルを開かせたい 【現状】 フルパスの中にスペースや全角文字が入ると別ファイルへのリンクとして認識されない (フルパスが半角英数字かつスペースがない場合は別ファイルへのリンクとして認識されダブルクリックで開くことができる) まだ秀丸を利用したばかりで解決策がわかりません。 ご存知の方、教えていただけると嬉しいです。 よろしくお願いいたします。

  • エクセルの貼り付けについてのマクロ記述を教えてください。

    次のような結果を出したいと思います。的確なマクロ記述あればぜひ教えてください。 まず、CTRL+Cによるセルのコピーは許可しますが、その直後の貼り付けについて、Enterキーを押した場合にかぎり、「CTRL+Vを使用してください」というポップアップ表示されるというものです。よろしくお願いします。

専門家に質問してみよう