コメントの書き方 解答ページ | Programming Place Plus C言語編 第5章

トップページC言語編第5章

問題①

問題① main関数をコメントアウトするとどうなるでしょう。


たとえば、次のように main関数全体を /* と */ で囲みます。

#include <stdio.h>

/*
int main(void)
{
    puts("Hello, World");
}
*/

main関数は必須なので、無効化されてしまうと、コンパイルエラーになります。

問題②

問題② 次のプログラムをコンパイルするとエラーになるでしょうか?(まず考えてから、試してください)

#include <stdio.h>

int main(void)
{
    /*
    char input_string[80];
        /*
        */
    /*/
    fgets(input_string, sizeof(input_string), stdin);
    printf("%s", input_string);
    */
}


色分けするとこうなります。

#include <stdio.h>

int main(void)
{
    /*
    char input_string[80];
        /*
        */
    /*/
    fgets(input_string, sizeof(input_string), stdin);
    printf("%s", input_string);
    */
}

C言語のコメントは入れ子にできないルールですから、まず最初のコメントは、5~8行目の部分です。したがって実質は次のような状態です。

#include <stdio.h>

int main(void)
{
    /*/
    fgets(input_string, sizeof(input_string), stdin);
    printf("%s", input_string);
    */
}

/*/ はコメントの開始のようにも終わりのようにもみえますが、ここではコメントの開始になります(手前の文字から順番に処理されていくと考えればよいです)。このコメントの終わりは、printf関数の呼び出しの次の行にある */ のところです。したがって実質は次のような状態だと分かります。

#include <stdio.h>

int main(void)
{
}

結局、main関数の中身は何もないことになります。コンパイルは正常に行えます。

問題③

問題③ 次のプログラムは正しいでしょうか。

#include <stdio.h>

int main(void)
{
    /*  puts関数に変えてみた
    printf("コメントは /* と */ で挟む\n");
    */
    puts("コメントは /* と */ で挟む");
}


正しくありません。printf関数の部分をコメントアウトしたつもりですが、printf関数が出力しようとしていた文字列の中に、コメントの終わりを表す */ が含まれてしまっているため、コメントアウトの効果が途切れてしまいます。

色分けするとこうなります。

#include <stdio.h>

int main(void)
{
    /*  puts関数に変えてみた
    printf("コメントは /* と */ で挟む\n");
    */
    puts("コメントは /* と */ で挟む");
}

/**/ は、複数行にまたがってコメントにできますが、この問題のような現象に引っ掛かることがよくあります。


参考リンク


更新履歴

’2018/6/15 第8章から練習問題⑫を移動してきて、練習問題③とした。

’2018/1/30 全面的に文章を見直し、修正を行った。

’2008/11/9 新規作成。



第5章のメインページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る