C言語のコンパイラエラー C2735について解説
コンパイラエラー C2735 は、C言語で関数の仮引数に対し無効なキーワードを使用した場合に発生します。
たとえば、仮引数の型指定に inline を記述するとエラーとなります。
キーワードの使用場所や記述方法に注意して記述してください。
エラー C2735の発生原因
このエラーは、関数の仮パラメータ(実引数に対応する変数)の型指定子として不適切なキーワードが使用された場合に発生します。
コンパイラは、特定のキーワードがパラメータの型指定子で使用されることをサポートしていないため、エラー C2735 を出力します。
ここでは、C/C++のコード内で禁止されているキーワードの使い方について詳しく解説します。
仮パラメータでの不適切なキーワード使用
関数の仮パラメータに対する型指定子として、一部のキーワード(例:inline
)は使用できません。
関数の本体や関数宣言の際には有効なキーワードであっても、仮パラメータの型指定子として指定すると文法ルールに反してエラーが発生します。
たとえば、以下のようなコードはパラメータ定義部分で不適切なキーワードを挿入しているため、エラー C2735 が発生します。
キーワードの使用禁止条件の詳細
コンパイラでは、仮パラメータの型指定子として使用可能なキーワードが明確に規定されています。
inline
のような最適化やリンクに関連するキーワードは、関数全体に対する指定として用いることが正しい使い方です。
また、型修飾子やストレージクラス指定子の使用には一定のルールがあり、仮パラメータの宣言内でキーワードを混用すると、コンパイラが意図しない解釈を行い、エラーとなる場合があります。
Microsoft Learn などの公式ドキュメントを参照し、どのキーワードがどのコンテキストで許容されるかを確認することが重要です。
エラー検出のコード例
エラー C2735 を発生させるコード例と、その特徴について見ていきます。
実環境で実際にコンパイルを行った場合のエラーメッセージも含めて解説します。
発生例となるコードの特徴
発生例のコードは、関数の仮パラメータにおいて不正なキーワードを使用しています。
以下の C++ のコード例では、関数 f
のパラメータ定義部分において inline
キーワードが誤って使用されており、これが原因でエラー C2735 が発生します。
#include <iostream>
// 間違ったコード例: 仮パラメータに inline を使用している
void f(inline int value) {
// 処理内容(例として値を出力)
std::cout << "値: " << value << std::endl;
}
int main() {
f(10);
return 0;
}
// コンパイルエラー例(実際のエラーメッセージはコンパイラ依存)
// error C2735: 'inline' キーワードは、仮パラメーターの型指定子で使用できません
コンパイラからのエラーメッセージの内容
コンパイラは次のようなエラーメッセージを出力します。
「inline
キーワードは、仮パラメーターの型指定子で使用できません」
このメッセージは、指定されたキーワードが仮パラメータ部分では不適切であることを明示しており、修正の必要が示唆されます。
エラーメッセージはシンプルですが、原因となっている部分を正確に指摘しているため、原因の追及に役立ちます。
エラー回避の具体的な方法
エラー回避のためには、禁止されているキーワードの正しい利用方法を理解し、パラメータ宣言部分で誤った指定を行わないようにする必要があります。
ここでは、正しい記述方法とその具体例を紹介します。
インライン指定子の正しい利用方法
inline
キーワードは、関数本体に対して適用することにより、コンパイラに対してインライン展開を促す役割があります。
関数の宣言や定義で正しく使用する場合、仮パラメータの型指定子として指定するのではなく、関数自体の修飾子として用いる必要があります。
以下に、適切な使用例を示します。
改善されたコード例の提示
こちらは、inline
キーワードを関数本体に対して正しく指定する例です。
なお、本例では、add
関数を使って数値の加算結果を出力します。
#include <stdio.h>
// 正しいコード例: inline キーワードは関数定義全体に適用する
inline int add(int num1, int num2) {
return num1 + num2;
}
int main(void) {
int sum = add(3, 4);
// 結果を出力
printf("結果: %d\n", sum);
return 0;
}
結果: 7
この修正例では、inline
キーワードを関数 add
の定義全体に適用しており、仮パラメータには通常の int
型を指定しています。
これにより、エラー C2735 を回避することができます。
型指定子の正しい記述例
パラメータの型指定子を正しく記述するためには、関数の宣言部分で許容されるキーワードと修飾子のみを使用する必要があります。
例えば、次のようにシンプルな型指定を行うことでエラーを回避できます。
#include <stdio.h>
// 不正なキーワードがない正しい関数宣言の例
void process(int value) {
// 値の表示
printf("受け取った値: %d\n", value);
}
int main(void) {
process(20);
return 0;
}
受け取った値: 20
このように、仮パラメータの型指定では基本となる型のみを指定し、インライン関連のキーワードなど誤って使用されがちな修飾子は避ける必要があります。
C言語とC++におけるエラー処理の違い
C言語とC++では、文法や機能の一部が異なるため、同じキーワードの扱いに差異が生じることがあります。
ここでは、各言語における仕様上の相違点と、それに伴うエラー発生の違いを解説します。
各言語における仕様上の相違点
C言語とC++はどちらも同じ基本的な構文を持っていますが、拡張された機能や最適化のためのキーワードの取り扱いに違いがあります。
具体的には、C++ではオブジェクト指向の特徴や名前空間などがサポートされており、inline
キーワードの意味が C言語と比べて役割分担される部分があります。
一方、C言語ではシンプルな関数定義が中心となり、キーワードの使い方が限定されるため、意図せぬエラーを回避するための記述方法にも差が出ることがあります。
エラー発生の具体的な違いの検証
C++のコードで発生するエラー C2735 は、仮パラメータに対して不正なキーワードが指定された場合に発生しますが、C言語の場合、同様のキーワードが存在しないか、もしくはコンパイラの仕様により別のエラーが生成される可能性があります。
たとえば、Cでは inline
キーワード自体が、関数定義に対してのみ有効であり、パラメータ宣言に含めた場合にはシンタックスエラーとなることが一般的です。
以下のサンプルコードは、両言語におけるキーワード使用の違いを理解するための例です。
#include <stdio.h>
#ifdef __cplusplus
// C++の場合、間違った仮パラメータでのキーワード使用(エラー発生)
void testFunction(inline int value) {
printf("C++ - 値: %d\n", value);
}
#else
// Cの場合、そもそも inline の使用方法が異なるのでエラーとなる可能性がある
void testFunction(inline int value) {
printf("C - 値: %d\n", value);
}
#endif
int main(void) {
testFunction(30);
return 0;
}
// C/C++いずれの場合も、仮パラメータに inline を使用することは不正なため、コンパイルエラーとなる
この例では、プリプロセッサディレクティブを用いて C++ と C の両方の環境でエラーの発生条件を示しています。
各言語でコンパイラの反応が異なることを理解し、正しい文法でコードを書くことが求められます。
まとめ
この記事では、関数の仮パラメータ内で不正なキーワード(例:inline
)を使用した場合に発生するエラー C2735 の原因と、その状況でのコンパイラエラーメッセージの内容について解説しています。
また、エラー回避のための正しい inline
の使い方や型指定子の記述例を示し、C言語とC++における仕様の違いを検証しました。
これにより、エラーの発生原因と修正方法の理解が深まる内容となっています。