C言語練習問題
C言語練習問題
環境について
C言語の練習問題です。
開発環境は以下の通り。
PC:MacBook Pro 2011early 15inch
OS:Windows 8.1(デュアルブート)
メモリ:16GB(8GB x 2)
CPU:Core i7-2635QM 2.00GHz
コンパイラ:MinGW-w64 5.3.0 (posix, sjlj)
※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。
※※各問題へのリンク一覧を作成しました。
問題
次のプログラムを作った。コンパイル、実行に関して以下の問いに答えよ。
プログラム(test32.c)
#include <stdio.h> #include <stdint.h> typedef union MyUnion{ int8_t ch[128]; int32_t num; } MyUnion_u; int main(void){ MyUnion_u uni; printf("sizeof(uni) = %d\n", sizeof(uni)); return 0; }
問1.次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。
A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の中の空欄を埋めよ。
なお、コマンドを入力する前はディレクトリ内のファイルはtest32.cのみであった。
gcc -o test32.exe test32.c
選択肢A,B,C
A.コンパイルに成功して( 空欄1 )が生成される。
B.( 空欄1 )ためコンパイルエラーが起こる。
C.コマンドの( 空欄1 )の部分が間違っているためコンパイルが実行されない。
問2.その後、次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。 A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の空欄を埋めよ。
test32
選択肢A,B,C
A.ファイルが実行され( 空欄1 )と画面に表示される。
B.( 空欄1 )というファイルがないため実行できない。
C.コンパイルはされているが、( 空欄1 )という問題があるため実行結果は環境に依存する。
解答
問1
A.コンパイルに成功して( test32.exe )が生成される。
問2
A.ファイルが実行され( sizeof(uni) = 128 )と画面に表示される。
解説
問1,問2
今回は共用体を利用している。共用体はそのメンバ間でメモリを共有する。共用体の大きさは、そのメンバの中で最大のものと一致する(ただし、バイトオーダーにかかった場合はその限りではない。)
今回の場合はint8_t型がサイズ1byte、int32_t型が4byteで、int8_t型は長さ128の配列になっている。したがって、sizeof(uni)はメンバの中で最大の大きさを持つsizeof(ch)と一致する。(通常の環境では、128byteであればバイトオーダーにかからないが、その部分を指摘していた場合は問2はCでも正解とする。)
プログラム(test32_1.c)
#include <stdio.h> #include <stdint.h> typedef union MyUnion{ int8_t ch[128]; int32_t num; } MyUnion_u; int main(void){ MyUnion_u uni; printf("sizeof(uni) = %d\n", sizeof(uni)); printf("sizeof(uni.ch) = %d\n", sizeof(uni.ch)); printf("sizeof(uni.num) = %d\n", sizeof(uni.num)); return 0; }
実行結果
>gcc test32_1.c -o test32_1.exe >test32_1 sizeof(uni) = 128 sizeof(uni.ch) = 128 sizeof(uni.num) = 4
実践力が身につくC言語講座 連載リンク
競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載
アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載
パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載