main()関数からprintf()の出力を変更する方法を解説
この記事では、main()関数からprintf()関数の出力を変更する方法について解説します。具体的には、特定の形式のprintf()呼び出しを、指定した別の値に置き換える関数を定義する手法を紹介します。
このタスクを実現するために、#defineマクロを使用します。ポイントは、このマクロを関数の中で定義することです。#define行を関数の外に直接記述することも可能ですが、その場合はプログラム全体で常にprintf()が置き換えられてしまいます。main()から制御できるようにするには、まず専用の関数を呼び出す必要があります。
コード例
#include <stdio.h>
void changePrintf() { // これ以降、printfは必ず50を出力する
#define printf(x, y) printf(x, 50);
}
main() {
int x = 40;
changePrintf();
printf("%d\n", x);
x = 60;
printf("%d", x);
}実行結果
50 50
動作の仕組み
上記のコードでは、changePrintf()関数が呼び出された時点で、printf(x, y)という形式のマクロが定義されます。これにより、それ以降のprintf()呼び出しでは、第2引数として渡された変数の値(40や60)ではなく、固定値の50が出力されるようになります。
そのため、xに40や60など異なる値を代入しても、実行結果はどちらも「50」となります。これはプリプロセッサのテキスト置換機能を利用したテクニックですが、可読性やデバッグの観点から、実際の開発では注意して使用すべきでしょう。
-
C#でコンソールのCursorLeftを変更するにはどうすればよいですか?
C#でコンソール画面のカーソル位置(CursorLeft)を変更したい場合は、Console.CursorLeftプロパティを使用します。このプロパティに列番号を設定することで、カーソルを指定した桁位置へ移動させることができます。サンプルコード実際の使用例を見てみましょう。以下のコードでは、まずコンソールの背景色と文字色を変更し、その後CursorLeftプロパティでカーソル位置を設定しています。using System; class Demo { public static void Main (string[] args) { &nbs
-
【保存版】テキストの大文字・小文字を一瞬で変換する方法|Word・Googleドキュメント・Mac・オンラインツール対応
Microsoft WordやGoogleドキュメントで文章を入力した際、「大文字と小文字を間違えて打ってしまった…」という経験はありませんか?「小文字を大文字に(あるいはその逆に)変えたいのに方法がわからない」というお問い合わせを多くいただきます。中には、誤入力した部分を全部消して打ち直そうと考えている方もいますが、実はもっと効率的な解決策があります。幸いなことに、Microsoft Wordをはじめとするほぼすべてのテキストエディタには、選択したテキストの大文字・小文字を変換する機能が標準搭載されています。ITに詳しくない方でも簡単に操作でき、しかもその方法は複数あります。この記事では、そ