ITメモ
C言語 / Programming Language C
開発環境 / Development Environment
【Mac】Xcode【Win】Visual Stadio
基礎 / Basic
About C言語書式コンパイルとリンクメイクファイル / Makefileヘッダファイル変数定数型 / Type配列 / Arrayポインタ / Pointer演算子 / Operator制御文 / Control Statement関数構造体と共用体 / Structure & Unionプリプロセッサ / PreprocessorthisキーワードTypedef
文字列 / String
文字列 / Stringsnprintf - 文字列書式に従って指定文字数分だけ文字配列に書き込む
ネットワーク / Network
memset - メモリブロックのセット
メモリー管理
メモリー
入出力 / Input & Output
入出力入力フォーマット指定子出力フォーマット指定子
オペレーション / Operation
ファイル操作 / File Operationコマンドラインプログラム / Command-Line Programプロセス / Processソケット通信 / Socket Communication
用語集 / Glossary
サブルーチン / Subroutineスタックとキュー / Stack & Cueスレッド / Thread
C言語標準ライブラリ(ヘッダファイル)
C言語標準ライブラリC言語標準ライブラリ【assert.h】 - 診断機能C言語標準ライブラリ【complex.h】 - 複素数計算C言語標準ライブラリ【ctype.h】 - 文字操作C言語標準ライブラリ【errno.h】 - エラーC言語標準ライブラリ【fenv.h】 - 浮動小数点環境C言語標準ライブラリ【float.h】 - 浮動小数点型の特性C言語標準ライブラリ【inttypes.h】 - 整数型の書式の変換C言語標準ライブラリ【iso646.h】 - 代替つづり(Alternate spellings)C言語標準ライブラリ【limits.h】 - 整数型の大きさC言語標準ライブラリ【locale.h】 - 文化圏固有操作C言語標準ライブラリ【math.h】 - 数学C言語標準ライブラリ【setjmp.h】 - 非局所分岐C言語標準ライブラリ【signal.h】 - シグナル操作C言語標準ライブラリ【stdalign.h】 - アライメントC言語標準ライブラリ【stdarg.h】 - 可変個数の実引数C言語標準ライブラリ【stdatomic.h】 - アトミック操作C言語標準ライブラリ【stdbool.h】 - 論理型および論理値C言語標準ライブラリ【stddef.h】 - 共通の定義C言語標準ライブラリ【stdint.h】 - 整数型C言語標準ライブラリ【stdio.h】 - 入出力C言語標準ライブラリ【stdlib.h】 - 一般ユーティリティC言語標準ライブラリ【stdnoreturn.h】 - _NoreturnC言語標準ライブラリ【string.h】 - 文字列操作C言語標準ライブラリ【tgmath.h】 - 型総称数学関数(Type-generic math)C言語標準ライブラリ【threads.h】 - マルチスレッドC言語標準ライブラリ【time.h】 - 日付及び時間C言語標準ライブラリ【uchar.h】 - UnicodeユーティリティC言語標準ライブラリ【wchar.h】 - 多バイトおよびワイド文字拡張ユーティリティC言語標準ライブラリ【wctype.h】 - ワイド文字種分類およびワイド文字大文字小文字変換ユーティリティ
C言語ライブラリ(ヘッダファイル)
C言語ヘッダファイル【winsock.h】





プリプロセッサ / Preprocessor




プリプロセッサとは



msdn「プリプロセッサ」 - (マイクロソフトのライブラリ)
http://msdn.microsoft.com/ja-jp/library/3sxhs2ty.aspx


#defineマクロ定義
#error
#import
#undef
#etdf
#if条件分岐
#includeヘッダファイルの読み込み。
#using
#else
#ifdefマクロが定義の条件分岐
#tdne
#endif
#ifndef
#pragmaプラグマは、コンパイル時に、コンパイラの設定を一時的に変更したいときなどに使用。



#if

#if 条件式1
条件式1が「真」のときに実行されるコード
#elif 条件式2
条件式2が「真」のときに実行されるコード
#else
条件式1と条件式2の両方が「偽」となるときのコード
#endif






#ifdef マクロ名 ~ #else ~ #endif

#ifdef マクロ名 ~ #else ~ #endif
マクロが定義されていたならば、「#ifdef」と「#else」の間が実行され、「#else」と「#endif」 の間は、マクロが定義されていない場合に実行される。
「#else」がない場合は、「#endif」までの間が実行される。


マクロが定義されていないならば、「#else」と「#endif」の間の行が有効となり、コンパイルされる。

#ifndef マクロ名 ~ #else ~ #endif
#ifdef の逆
マクロ名 が #defineで定義されてない時にかぎり、「#ifndef」マクロ名 と「#else」の間が有効となり、コンパイルされる。
マクロが定義されているならば、「#else」と「#endif」の間の行が有効となり、コンパイルされる。


プリプロセッサディレクティブの構文
条件式に「 defined 」
マクロが定義されているかどうかを判定する。
#ifdef A
#if defined(A)
#ifndef  A
#if !defined(A)



#include

ヘッダファイルの呼び込み
#include
ヘッダファイル保存ディレクトリからヘッダファイルを探す
#include "header.h"
カレントディレクトリをまず探し、その後、ヘッダファイル保存ディレクトリから探す。



#define

#define は 文字列1 を文字列2 で置き換える
#define = 「マクロ定義」
単に定数の「6」を用いるよりも、「NINZU」とマクロ定義した方が意味がわかりやすくなる。
プログラムの変更が生じ、学生数が「6」から他の数値になったときに、#define 定義を修正するだけで対応できる。
記号定数は他の変数と区別するために大文字で記述するとよい。
文字列2 の部分には、既にマクロ定義されている記号定数を用いることもできる。



構文
#define 文字列1 文字列2  (文字列1 を記号定数とも呼ぶ)

#difine sample01 sample02
sample01と記述すると、sample02と記述したことになる。

プリプロセッサディレクティブでの分岐



#pragma



  • プラグマは、コンパイル時に、コンパイラの設定を一時的に変更したいときなどに使用。
  • どのようなコマンドが使用できるかは、コンパイラに依存する。
  • コンパイラが対応していないプラグマは、無視される。


#pragma コマンド
#pragma once
ヘッダファイルの先頭に記述。
そのヘッダファイルは、一度だけしかインクルードされないようになる。


#paragmamessage("メッセージ")
ビルド時にメッセージを出す。


#error "エラーメッセージ"
ビルドエラーにしたい場合に使用。








コンパイラ定義済みのマクロ

__cplusplus C++のときに定義される
_MSC_VER Visual C++のときに定義される。コンパイラのバージョン
__APPLE__ Mac OS XのGCCやLLVMで定義される。
__linux__ LinuxのGCCで定義される。



; ;