This commit is contained in:
2025-04-21 15:34:24 +09:00
parent e7b0f70647
commit a510bce35e
10 changed files with 178 additions and 9 deletions

View File

@@ -1,9 +1,61 @@
\section{今回の構文}
\subsection{\texttt{\#include}マクロ}
コンパイラはソースコードをコンパイルする前にプリプロセッサを実行し、ファイル内に定義されたマクロを展開する。
マクロは普通の文と違い、「;」(セミコロン)が文末に無く、マクロ名の先頭に「\#」(ハッシュ記号)が付く。
\texttt{\#include}はマクロの1つであり、主に関数・変数・定数・型などの宣言が羅列されているヘッダーファイルの内容をマクロが書かれた場所に展開するもので、大抵の場合ソースコードの最上部に書かれている。\cite{cppref_include}
よく使用されるヘッダーファイルの一部には以下の物がある\cite{cppref_stdlibheaders}
\begin{itemize}
\item \texttt{stdlib.h}:標準ライブラリのこと、メモリ管理や頻出アルゴリズムなどに関する関数などが宣言・定義されている
\item \texttt{stdio.h}:標準入出力のこと、ファイル操作などに関する関数が宣言・定義されている
\item \texttt{string.h}:文字列操作によく使用される関数を宣言・定義されている
\item \texttt{wchar.h}:日本語のようなマルチバイトの文字を扱うための型や関数が宣言・定義されている
\item \texttt{math.h}:三角関数や対数関数などの数学関数が宣言・定義されている
\end{itemize}
\vspace{-0.5cm}
\defaultlistingstyle
\begin{lstlisting}[language=C,title={\texttt{\#include}マクロ},escapechar=\@]
#include <ヘッダーファイル.h> // 1) コンパイラ・システムが指定した
// ディレクトリ(フォルダパス)内でファイルを
// 探す。
// Linuxならば@\texttt{/usr/include}@の場合が多い。
// また、GCCでは引数に "-I <ディレクトリ>" を
// 渡すことで探索パスを実行時に追加できる。@\cite{gcc_man}@
#include "ヘッダーファイル.h" // 2) 書かれているソースコードと
// 同じディレクトリの中でファイルを探す。
// 見つからなければ 1) と同じ挙動を取る。
\end{lstlisting}
\subsection{\texttt{main}関数}
プログラムが呼び出される際に最初に実行される関数。
この関数の戻り値は整数型であるが、これはプログラムの終了が正常であるかどうかを示めすものであり、Linuxでは0が正常終了、1が異常終了などである。
この異常終了判定に使用される値はOSによって異なる。
なので\texttt{stdlib.h}で提供される\texttt{exit()}関数や\texttt{EXIT\_SUCCESS, EXIT\_FAILURE}定数を使うのが望ましい。\cite{cppref_mainfunc}
\begin{lstlisting}[language=C,title={\texttt{main}関数}]
int main(void) { // プログラム実行時に何も引数を渡す必要がない場合
// 文
return 0;
}
int main(int argc, char** argv) { // プログラム実行時に引数を渡す場合、argc は呼び出しプログラム名を含む引数の数、argv は呼び出しプログラム名を含む引数の値(文字列型)の配列である。
// 文
return 0;
}
\end{lstlisting}
\subsection{\texttt{printf}関数}
\texttt{printf}とはPrint Formatのことで、第一引数に書式(文字列)、第二以降の引数に表示したいデータ(変数、定数、リテラル)を羅列する。
この関数は\texttt{stdio.h}\lstinline[columns=fixed]{#include}(ソースコードに含める)ことで利用できる。\cite{cppref_printf}
この関数は\texttt{stdio.h}\texttt{#include}することで利用できる。\cite{cppref_printf}
\defaultlistingstyle
\begin{lstlisting}[language=C,title={\texttt{printf}関数}]
@@ -21,6 +73,8 @@ printf("<書式>", <データ1>, <データ2>, ...);
更に、書式には文字の表示を制御できる特殊文字(escape sequence)があり、一部の文字はソースコードと干渉するためそれらを使用しないと表示できない。特殊文字はバックスラッシュで始まり、ASCII文字1つが続く。
\newpage
\begin{lstlisting}[language=C,title={特殊文字(一部)\cite{xiny}}]
"\n" // 改行
"\\" // バックスラッシュ
@@ -29,8 +83,6 @@ printf("<書式>", <データ1>, <データ2>, ...);
"\'" // シングルクウォーテーションマーク
\end{lstlisting}
\newpage
\subsection{変数宣言・定義}\label{var_decl_def}
変数はコンピュータのメモリ上にある値が入る箱のような物である。この箱には整数や小数値、文字などが入るが、メモリ上ではすべて1と0で表現されている。
@@ -54,3 +106,14 @@ a = 17; // 変数名 a に 17 という値を書き込む
\begin{lstlisting}[language=C,title={C99以降の変数宣言・代入}]
int a = 17; // 整数型の変数 a の宣言と同時に 17 という値を書き込む
\end{lstlisting}
型には一部として以下の物がある\cite{xiny}
\begin{itemize}
\item \texttt{int}:整数型
\item \texttt{char}:文字型
\item \texttt{float}32ビット単精度浮遊少数型
\item \texttt{double}64ビット倍精度浮遊少数型
\end{itemize}
なお、一部の型が占有するバイト数はコンパイラやCPUによって異なるが、\texttt{x86\_64}の場合は\texttt{int}型が4バイト、\texttt{char}型が1バイトである。