C プラグマ 新しいページはコチラ
提供: yonewiki
(→#pragma comment) |
(→#pragma comment) |
||
37行: | 37行: | ||
このサイトを含め、ただで勉強しようとすると、結局は時間の無駄に終わることはよくあります。学ぶべき手段を選び間違えた自分を悔いるしかないです。そうならないように、できるだけ有用なものにはしていきたいとは思いますが、違う生業(なりわい)のかたわらの執筆です。なにぶんお聞き苦しい点も多々あろうかとは存じますが、耳を傾けていただければと思います。 | このサイトを含め、ただで勉強しようとすると、結局は時間の無駄に終わることはよくあります。学ぶべき手段を選び間違えた自分を悔いるしかないです。そうならないように、できるだけ有用なものにはしていきたいとは思いますが、違う生業(なりわい)のかたわらの執筆です。なにぶんお聞き苦しい点も多々あろうかとは存じますが、耳を傾けていただければと思います。 | ||
+ | |||
+ | |||
+ | 文字列操作について触れた記事で、ICUのライブラリを使った記事があります。そこでは具体的には、以下のように利用しました。 | ||
+ | |||
+ | <syntaxhighlight lang="cpp" line start="1"> | ||
+ | //ICU ucnvプリプロセッサ(ライブラリはデバッグモードとリリースモード個別設定) | ||
+ | #include <unicode/ucnv.h> //ucnv文字コード変換ライブラリヘッダ | ||
+ | #include <unicode/translit.h> //文字変換ライブラリヘッダ | ||
+ | #include <unicode/regex.h> //正規表現 | ||
+ | #include <unicode/ucsdet.h> //文字コード判定 | ||
+ | #include <unicode/ucal.h> //文字コード判定 | ||
+ | #include <unicode/uclean.h> //u_cleanup関数 | ||
+ | /* for uloc_getDefault() */ | ||
+ | #include <unicode/uloc.h> | ||
+ | #include <unicode/calendar.h> | ||
+ | #include <unicode/smpdtfmt.h> | ||
+ | |||
+ | //#include "unicode/utypes.h" | ||
+ | //#include "unicode/locid.h" | ||
+ | //#include "unicode/unistr.h" | ||
+ | //#include "unicode/tzfmt.h" | ||
+ | //#include "unicode/tznames.h" | ||
+ | |||
+ | |||
+ | #ifdef _DEBUG | ||
+ | #pragma comment(lib, "icudt.lib") | ||
+ | #pragma comment(lib, "icuucd.lib") //ICU ucnvを使うために必要なライブラリ | ||
+ | #pragma comment(lib, "icuind.lib") //ICU Transliterate関数を使うために必要なライブラリ 正規表現関数も | ||
+ | #pragma comment(lib, "iculed.lib") | ||
+ | #pragma comment(lib, "iculxd.lib") | ||
+ | #pragma comment(lib, "icuiod.lib") | ||
+ | #pragma comment(lib, "icutud.lib") | ||
+ | |||
+ | #else | ||
+ | //#pragma comment(lib, "icudt.lib") | ||
+ | #pragma comment(lib, "icuind.lib") //ICU Transliterate関数を使うために必要なライブラリ 正規表現関数も | ||
+ | #pragma comment(lib, "icuuc.lib") //ICU ucnvを使うために必要なライブラリ | ||
+ | //#pragma comment(lib, "icuio.lib") | ||
+ | #endif | ||
+ | //Data Library icudtXX(d).dll icudt(d).lib | ||
+ | //Common Library icuucXX(d).dll icuuc(d).lib | ||
+ | //Internationalization(i18n) Library icuinXX(d).dll icuin(d).lib | ||
+ | //Layout Engine iculeXX(d).dll icule(d).lib | ||
+ | //Layout Extention Engine iculxXX(d).dll iculx(d).lib | ||
+ | //ICU I/O(Unicode stdio) Library icuioXX(d).dll icuio(d).lib | ||
+ | //Tool Utility Library icutuXX(d).dll icutu(d).lib | ||
+ | |||
+ | //ICU ucnv _End | ||
+ | |||
+ | #include "UnicodeConverter.h" | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | このようにプラグマと#ifディレクティブのようなプリプロセッサ構文制御やマクロ定義といったディレクティブを併用して、適切なライブラリがロードされるようにプログラムソースで記述することができます。_DEBUGというマクロ定義はVisualStudioではプロジェクトの中でもデバッグモードというプログラム作成時の不具合箇所発見をするための方式を利用している作業のときだけ定義されるマクロで、要するにモード毎に異なるライブラリを使っています。ライブラリにもデバッグ向けのライブラリとリリース向けのライブラリが分かれている場合があり、デバッグ向けのライブラリを使っているとデバッグをしやすいように例外処理による警告が発動するように作られていて、ライブラリ利用中に発生した問題でも、どのような問題が起こったのかをわかりやすく支援してくれる形式になっています。 | ||
+ | |||
+ | |||
+ | もちろん、プロジェクトのプロパティもリリースモード、デバッグモードで別々に設定することができますので、個別にプロパティ部分の利用するライブラリ名を記述する欄に記述することができます。 | ||
===#pragma once=== | ===#pragma once=== |