コンテンツにスキップ

Q&A

ここでは講義中に出た質問に対する回答を載せていきます。随時更新です。

Week1

  • 出席点はあるか?

    • ありません。もしC言語を既に全部理解しているなら、講義に出なくても大丈夫です。宿題だけは全部やってください。宿題・最終レポートのみで成績をつけます。
  • 他学部・他学科だが履修可能か?

    • 履修出来ます。便覧やUTAS/UTOLをよく読んで取得単位等について確認してください。
  • githubのアカウント名の確認方法がわからないです

    • 自分のページを開いたときにhttps://github.com/matsui528だとしたらmatsui528の部分です。
  • githubの個人アカウントは持っているのですが、授業期間中は名前を本名にした方がいいのでしょうか

    • しなくても大丈夫です。こちらで紐づけます。
  • スライドとかだと1つのアドレスに対応するのは8bitになっていますが、一つのアドレスに4bitなど他のビット数が対応するような場合はありますか

    • 通常のみなさんが扱うコンピュータだと8bitだと思って大丈夫です。
  • アドレスは必ずいつも64bitなのでしょうか

    • 64ビットコンピュータの場合はそうです。最近の普通のコンピュータは全て64bitコンピュータですが、10年?前などは32bitコンピュータというものが普通にありました。
  • 変数を宣言したときにその変数に対応するアドレスが決まると思いますが、そのアドレスの決め方は何か規則があるのでしょうか。

    • これはコンパイラやOSによって決まります。C言語のレベルで皆さんが簡単に知ることは難しいと思います。
  • v / 3 = %f で実行したらv/3 = 41.166668だったのに、v / 3 = %d で実行したらv/3 = -1772391776と出てきました。どうしてですか?

    • %dは整数を表示するためのものなので、おかしな出力になります
  • charとint、unsigned charとcharなどを使い分ける理由は何ですか?

    • charとintは、使うビット数が4倍違うので、メモリ消費量が重要な場面では使い分けが必要になります。unsignedの有無は、(1) charの場合はどは特に、正の値の表現能力が2倍になるので嬉しい場合がいろいろある、(2) ビット演算を用いる際にunsignedのほうが便利な場合がある、などです。
  • pythonのように、height, width = 1,2;としたいのですが、ランダムな巨大整数が出力されてしまいます

    • c言語ではA, B = HOGE, FUGAタイプの代入の記述は出来ません(そのような構文はありません)
  • これまでマイコン向けのC言語は使っていたもののパソコン向けのC言語はほぼ触れていない人間です。これまでuint8_tとか書いてきたものを、パソコンではunsigned charと書くのが普通という感じでしょうか。(個人的にはcharは文字のイメージが強く…)

    • uint8_tのような型は、c言語においてはc99という規格で定められたものだそうです。uint8_tの流儀をとるライブラリもあると思いますが、C言語として最も基本となっているプリミティブな表現はunsigned charのほうです(uint8_tは、存在しない環境がありえる)
  • c3に代入したのは140なのに、なぜ表示されるのは-116なのですか?

    • week2でまさに取り上げます。
  • 今写経しているコードですが、int area; (改行) area = height * width;と書くのと、int area = height * width;と書くのはどちらが推奨とかはあるのでしょうか?

    • 今回の例ではあまり関係ないですが、一般には値が未定義の状態ができないように、宣言と同時に代入する(後者)のほうがよいでしょう
  • main.cを一度コンパイルして、a.outを出力し、次に少しmain.cを編集(printfの中身を変える)して保存し、もう一度コンパイルするとa.outに上書き保存されてしまいますが、上書き保存されず、新しくb.outみたいな別ファイルを作ることはできないのですか?

    • パッとは思いつかないのですが、gccにそういうオプションがあれば出来るかもしれないです。できなければ、Makefileというのを書いたりしたら出来ると思います
  • cat usr/include/stdio.hを実行する際は自分のユーザーネームに変えるのですか。それでやってもNo such file or directoryと出ます

    • 最初にスラを忘れています。 /usr... です
  • a.outの名前を変えるgccコマンドはありますか?

    • gcc main.c -o hogehoge のように -o オプションで出来ます
  • mainじゃなくint mainだとダメですか

    • int mainが正しいです
  • ""内の文字を"あああ"と変更した後にターミナルで./a.outと入力してもhello, worldと出力されるのですがなぜですか?

    • これはコンパイルを失敗していて、古いa.outを実行しているのだと思います。一度a.outを消してみてください。
  • main(){} のmainというのは変えられない決まった名前ですか

    • これは決まった名前だと思います。
  • タイピングの繁栄が遅いので再起動したら、main.cなどのファイルがあった場所が消えてしまったのですが、どこにあると思われますか?

    • 「ディレクトリを開く」みたいにして「/home/matsui528」のようなところ(matsui528は自分のユーザ名にしてください)を開いてみるとどうでしょうか
  • ターミナルに a.out と打ち込むだけではエラーになってしまうのに対し、 ./a.out と打ち込むとうまく実行ができる理由を教えていただきたいです。「./」はファイルを実行する命令ではないという認識なのですが…

    • 良い質問です。week1の最後のほうのコラムに詳しくまとめてあります。
  • #include <stdio.h> main() { printf("Hello, World\n") ; }だとエラーが出て、int を入れて#include <stdio.h> int main() { printf("Hello, World\n") ; }だと実行できるのですがなぜですか

    • エラーではなく警告です。intをつけるほうが正しいです。どちらでも実行できるはずです
  • main.cをコンパイルしてできるファイルがa.outなのはなぜですか。他のソースをコンパイルしても同じ名前になってしまうし、main.outとかのほうがわかりやすいような気がします。

    • その通り過ぎるのですが、昔の慣習だと思います。gcc main.c -o main.out のように-oオプションをつけると名前を変えられます
  • gcc main.cでwarningと書かれたエラーが出ます

    • エラーではなく警告です。これはmainの前にintをつけるほうが正しいので、文句を言われています。
  • stdio.hの部分はなんですか。pythonのimportと同じようなものでしょうか

    • そうです。printfを使うために必要なものです(しかし実は最近はこれを書かなくてもコンパイルが落ちるわけではなく、printfが使えます)
  • もう一度予測で出てくる"format"の消し方を教えていただけますか

    • ここのコラムを参考にしてください
  • ディレクトリとファイルを一度に作ることはできますか

    • touch aaa/bbb.txtのような書き方は出来ないようです。
  • 今やっていることの理解はできるのですが、これらがどういう良さ、利点があるのかがわからないです。

    • コマンドのありがたみがわからないということだと思いますが、やっているうちにわかるようになると思います。
  • touchでファイルを作る際。末尾に「.c 」をつけることには何か意味がありますか

    • あります。というか、mainとmain.cは別のファイル名です。.cがついていると、c言語のソースコードである、と他のソフトウェアが判断します。
  • cd で具体的なファイル名を入れるときは、相対パスなのでしょうか?

    • 絶対パスでも大丈夫です
  • touchやmkdirでpermission denied と出てしまいます

    • これは変なファイルを触っていたり、変な位置にいるのかもしれません。cd ~したところでやってみてください。
  • cannot create directoryと表示されてしまいます

    • これも変な位置にいるか、同名のファイルが既にある、といった問題なきがします
  • 少し遅れた質問になりますが、cppやRustの方が機能が多いというときの機能というのは何を指すのですか?ライブラリの種類が多いとかですか?

    • ライブラリもそうですが、コア機能が違います。たとえば「クラス」とか「テンプレート」というコア機能はc++にはありますがcにはありません
  • 先生は mv や cp を日常的にファイル移動するのに使いますか?それともfinder やエクスプローラー開いてドラッグしたり ctrl v したりしますか?

    • どっちも使います
  • $ cd - 「直前の位置」に戻る。例えば、$ cd /etc/emacsしたあとに$ cd /opt/mavenしてから$ cd -すると、/etc/emacsに戻る。 これについてですが、$ cd /etc/emacsや$ cd /opt/mavenとは何ですか?

    • それらはただの例なので、意味はないです
  • 現在Untitled-1というファイル名なのですが、ファイル名を変更するにはどうすれば良いでしょうか。

    • ファイルを右クリックして名前を変更するか、あるいはファイルをクリックしてF2キーでかえられます。mvでも変えられます。
  • cdがつくやってみようをするとbash: cd.: command not foundと表示されるのはどういう意味ですか?

    • cd.. ではなく cd .. です(スペースが必要)
  • ホーム位置というのは何で決まっているのですか

    • linux系の場合は/home/ユーザ名 と慣習で(?)なっていることが多いと思います。マックは違ったはずです
  • コンピュータの一番上とはなにを指しますか?

    • cd .. をし続けてそれ以上移動できなくなったところです。Cドライブの一番上、みたいな感じです
  • Tabを押しても補完されないです。

    • ちょっとわからないですが、いろいろ閉じて開きなおしたりしてみてください
  • ディレクトリとはフォルダのことですか

    • そうです
  • Cloud Shell Editorに接続できない

    • 事例1:何回リロードしてもエディタに接続できません
    • 事例2:Cloud Shell エディタを初期化しています が3分以上続いていて操作できなくなってしまいました。どうしたらよいでしょうか
    • 事例3:サードパーティCookieが無効であるため、コートエディタを読み込むことができません、と出てきてしまうのですが、どうすればいいでしょうか
    • 解決策1:サードパーティCookieが無効である>>「サイト越えトラッキングを防ぐ」をオフにすることで解消できました!
    • 解決策2:>サードパーティCookieが無効であるため、コートエディタを読み込むことができません、と出てきてしまうのですが、どうすればいいでしょうか  これなんですが、新しいウィンドウを開くを押したら同じような画面に飛べました。
    • 解決策3:同様の問題が発生していましたが,google アカウントを大学のから個人のに変えたらできました
    • 上記検証してくれたみなさん、ありがとうございます!(松井)
  • 今の解説はwindowsの場合ですか?macの場合少し異なるということはあるのでしょうか?私の場合、ターミナルの開き方が今の解説の方法だと難しそうです。

    • 今日の解説はGoogle Cloud Shell Editor(ブラウザ)向けです
  • Linux環境で思い出したのですが、EEICの学科PC(UbuntuとWinのデュアルブートになっているもの)って僕たちも使えるのでしょうか?可能なら借りておいた方が楽でしょうか?

    • 学科PCは3年からが基本だと思います。今はまだ借りないでも大丈夫なはずです。
  • 本郷にいる大学院生ですが、次回以後対面になるんでしたら、授業の録画はあるのでしょうか?

    • 録画はないです。ただ出席もないので、単位をとるには宿題を出してくれれば大丈夫です。
  • Cの環境構築について質問がるのですが,Linux入れるんですか?winとmacそれぞれどちらの方がやりやすいとかありますか?

    • 今日はブラウザからやります。来週以降はwinでもmacでもブラウザでも大丈夫です。
  • プログラミング基礎演習をとっていなくてもこの授業についていけますか

    • はい。ついていけます
  • Cってcppって何が違うんですが?授業だとcppじゃなくてC使うんですか?

    • cppのほうが機能が多いというのがショートアンサーです。Cがまず基本としてあるので、まずCを教えます。