恐怖の月曜日 2007-11-26 Vol.2

K講師ネタではないので、恐怖でもなんでもないんですが、微妙に絡むこと。
私が担当している情報処理のC言語クラスではVisual C++ 2005 (VC8.0) のclコンパイラを利用しているのですが、そやつを使ってコンパイルしたときに scanf() を使っているとワーニングが出ます。
scanf_s() という関数を変わりに使えと言ってくるのですが、多分 scanf_s() はMicrosoftが独自に組み込んである(scanf()に比べて)セキュアな関数なんでしょう、きっと。(/Wallオプションが入ってるからワーニングが出るのではないかと。)

けどまぁ実際には scanf() で授業を進行していますし、scanf() が入っているがためだけにいらないワーニング情報がズラーっと数行に渡って表示されますので、ワーニング情報が何かとウザいらしいです。(私はGCCを使っているので全然気にしてないんですが・・・)

そこで講師陣は毎回生徒に

#define  _CRT_SECURE_NO_DEPRECATE

というのを記述させているわけですが、コピペするにしてもなんか面倒な気がするので、

/* VC8.0 scanf() 警告抑制 */
#define  _CRT_SECURE_NO_DEPRECATE

というヘッダファイルを作成してインクルードさせたらどうだろうというチキンな考え方をし始めた今日この頃。
そうすると例えば

/* 警告抑制の記述があるヘッダをvc.hとする */
#include "vc.h"
#include
<stdio.h> #include <stdlib.h> int collatz( int n ); int input( void ); void output( int count, int i_num ); int main( void ) { int n, count; n = input(); count = collatz( n ); output( count, n ); return 0; } int input( void ) { int i_num; while( 1 ) { printf( "Input integer number : " ); scanf( "%d", &i_num ); if( i_num <= 1 ) { printf( "error!\n" ); continue; } else { break; } } return i_num; } int collatz( int n ) { int count = 0; while( 1 ) { printf( "%d", n ); if( n % 2 == 0 ) { n = n / 2; } else if( n == 1 ) { printf( "\n" ); break; } else { n = n * 3 + 1; } ++count; printf( "," ); } return count; } void output( int count, int i_num ) { printf( "%d times %d to 1.\n", count, i_num ); }

とすると、長ったらしいのを入れなくても警告抑制ができるじゃないかと。
無駄な入力に時間を掛けて課題ができないなんていう事態も起きてますし、こういうこともしておいたほうがいいような気がする。
または、実はこの授業用の環境ではバッチファイル化してあって、 "vc src_name.c"と入力すると自動的にコンパイルして実行するようにしてあるので、バッチファイルの中に警告抑制文を入れてしまうか。
けどそもそも、そこまでやる必要があるのかとも思ってしまうわけで。

ちなみにこのソースコードはどこぞにあったものを引っ張り出してきたやつ。
我ながらヘtks(ry

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中