C言語練習問題
C言語練習問題
環境について
C言語の練習問題です。
開発環境は以下の通り。コンパイラ、OSともに64bit環境である。
PC:MacBook Pro 2011early 15inch
OS:Windows 8.1(デュアルブート) 64bit版
メモリ:16GB(8GB x 2)
CPU:Core i7-2635QM 2.00GHz
コンパイラ:MinGW-w64 5.3.0 (posix, sjlj)
※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。
※※各問題へのリンク一覧を作成しました。
問題
次のプログラムを作った。コンパイル、実行に関して以下の問いに答えよ。
プログラム(test49.c)
#include <stdio.h> int main(void){ printf("Hello World!nr"); return 0; }
makeファイル(makefile)
※ブログ上では表記の都合で半角スペースでタブの代用を行うが、Makefile内ではスペースやタブの挿入、改行は適切に行われているものとし、その点はエラーの原因にならないものとする。
# Makefile all: main main: test49.o gcc -o test49 test49.o -std=c99 test49.o: test49.c gcc -c test49.c -std=c99 clean: rm test49.o
問1.次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。
A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の中の空欄を埋めよ。
なお、コマンドを入力する前はディレクトリ内には3つのファイル(test49.c、Makefile、clean)があり、それ以外のファイルはなかった。また、今回の環境ではmakeコマンドの代わりにmingw32-makeコマンドを用いる。
mingw32-make mingw32-make clean
選択肢A,B,C
A.2つのmakeがきちんと実行され最終的に( 空欄1 )が生成される。
B.( 空欄1 )ためmakeは2つとも実行されない。
C.打ち込んだコマンドのうち、( 空欄1 )行目のmakeだけ実行されない。
問2.その後、次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。 A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の空欄を埋めよ。
test49
選択肢A,B,C
A.ファイルが実行され( 空欄1 )と画面に表示される。
B.( 空欄1 )というファイルがないため実行できない。
C.コンパイルはされているが、( 空欄1 )という問題があるため実行は危険である。
解答
問1
C.打ち込んだコマンドのうち、( 2 )行目のmakeだけ実行されない。
問2
A.ファイルが実行され( Hello World! )と画面に表示される。
解説
問1,問2
今回はmakeを利用している。makefileという名前のファイルにコンパイル時の依存関係などを記して置くと、記された内容に従ってコンパイルが行われる。
今回はmakefileの内容に問題はない。1行目のmakeは成功して無事test49.exeが生成される。test49.exeを実行すると画面にはHello World!が表示される。
しかし、cleanという名前のファイルが存在するため、うまく実行されない。実行後に以下のような表示が出る。
mingw32-make: 'clean' is up to date.
今回はmakefileを以下の用に直せば、cleanという名前のファイルがいても2行目のmakeを実行できる。
cleanの行の前に.PHONY: cleanを付け加えている。
makefile(makefile2) ※利用する前にファイル名をmakefileに直すこと。
# Makefile all: main main: test49.o gcc -o test49 test49.o -std=c99 test49.o: test49.c gcc -c test49.c -std=c99 .PHONY: clean clean: rm test49.o
実行例
>mingw32-make clean rm test49.o
なお、通常はmakeコマンドでmakeが実行されるが、前述のとおり今回の環境ではmingw32-makeコマンドでmakeを実行する。そのため、コマンドに問題はない。なお、makeはc言語以外の言語にも利用できるものがある。
今回の場合
makeファイルは適切に使用すればコンパイル作業が楽になる。記述方法に注意し、上手に利用すること。
実践力が身につくC言語講座 連載リンク
競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載
アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載
パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載