次の非常に単純なヘッダー ファイルがあります。
#ifndef __ZYNQ_CSORT_H__
#define __ZYNQ_CSORT_H__
#define CONSTANT 5
#endif
このヘッダー ファイルを同じフォルダー内の別の C ファイルにインクルードしています。プリプロセッサは、ヘッダー ファイルのインクルードについてまったく文句を言いませんが、定数の値を出力しようとすると、定義されていないことがわかります。何が起きているか知っている人はいますか?
次の非常に単純なヘッダー ファイルがあります。
#ifndef __ZYNQ_CSORT_H__
#define __ZYNQ_CSORT_H__
#define CONSTANT 5
#endif
このヘッダー ファイルを同じフォルダー内の別の C ファイルにインクルードしています。プリプロセッサは、ヘッダー ファイルのインクルードについてまったく文句を言いませんが、定数の値を出力しようとすると、定義されていないことがわかります。何が起きているか知っている人はいますか?
プリプロセッサが何をしようとしているのかよくわからない場合、C プリプロセッサを単独で実行すると明らかになることがよくあります。たとえば、次のようになりtest1.h
ます。
#ifndef TEST1_H
#define TEST1_H
/* In TEST1_H */
#define CONSTANT 5
#endif
...そしてtest1.c
:
#include "test1.h"
#include "test1.h"
int main(int argc, char **argv) {
return CONSTANT;
}
... running cpp -C test1.c test1.c.out
(-C
引数は、プリプロセッサにコメントを保持させます) はtest1.c.out
次のようになります:
# 1 "test1.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "test1.c"
# 1 "test1.h" 1
/* In TEST1_H */
# 2 "test1.c" 2
int main(int argc, char **argv) {
return 5;
}
したがって、私の場合、正しいヘッダー ファイルがインクルードされていると確信できます。