У меня есть собственный файл заголовка ("strings.h"):

#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#include "sdkGlobal.h"

#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */

#if !defined administration_H_
#define administration_H_

#define POS_STR_TITLE_OPERATIONS "somestr"

#endif

В одном из исходных файлов у меня есть:

#include "../inc/strings.h"

В коде, когда я использую:

    sdkShow (LINE3, 0, POS_STR_TITLE_OPERATIONS );

Я получаю ошибку:

src/main.c: In function 'postMainMenu':
src/main.c:190: error: 'POS_STR_TITLE_OPERATIONS ' undeclared (first use in this function)
src/main.c:190: error: (Each undeclared identifier is reported only once
src/main.c:190: error: for each function it appears in.)
make[1]: *** [src/main.o] Error 1
make: *** [all] Error 2

Есть идеи, почему?

0
user2568508 8 Янв 2014 в 15:25

2 ответа

Лучший ответ

Охранник всегда должен отражать имя заголовочного файла для защиты, поэтому он должен быть "strings_H_" и "sdkGlobal_H_"

Он предназначен для более крупных продуктов, в которых файлы заголовков имеют собственные зависимости. например "a.h" требует "length.h", а "b.h" также требует "length.h", вы охраняете "length.h", чтобы он оценивался один раз.

1
Peter Miehle 8 Янв 2014 в 11:52

Кажется, что administration_H_ уже определен. Так что, а не

#if !defined administration_H_
#define administration_H_

#define POS_STR_TITLE_OPERATIONS "somestr"

#endif

Ты намеревался

#if !defined administration_H_
#define administration_H_
#endif

#if !defined POS_STR_TITLE_OPERATIONS
#define POS_STR_TITLE_OPERATIONS "somestr"
#endif
1
UmNyobe 8 Янв 2014 в 11:28