#define __MY_BOOK__在myBook.h中定义了
typedef enum {
        ... ...
STR_MY_BOOK,
        ... ...
} STR_ID_BOOK_ENUM;在myBook.c文件中包含了该头文件
#ifdef __MY_BOOK__
     #include "myBook.h"
#endif在该文件中使用STR_MY_BOOK字符串的时候必须放在#ifdef __MY_BOOK__
    AddmyId(STR_MY_BOOK,,...);
#endif中使用,如果不是在这个预编译包含中使用就会说STR_MY_BOOK没定义。
即直接使用函数:AddmyId(STR_MY_BOOK,,...);
按理说这条语句不放在宏控制之间也能找到STR_MY_BOOK啊,搞了好久也不知道什么原因?
请大虾指教!

解决方案 »

  1.   

    把cpp中的#ifdef __MY_BOOK__和#endif不行吗?
      

  2.   

    是啊,我用的是C语言,在.c文件中去掉#ifdef __MY_BOOK__和#endif的话,就说找不到STR_MY_BOOK这个ID,必须放在#ifdef __MY_BOOK__和#endif之间,我就纳闷了?
      

  3.   

    #ifdef __MY_BOOK__
    #include "myBook.h"
    #endif
    --------------------
    好矛盾,好奇怪,这样怎么可能会#include "myBook.h";这样才是吧
    #ifndef __MY_BOOK__
    #include "myBook.h"
    #endif
      

  4.   

    是啊,我用的是C语言,在.c文件中去掉#ifdef __MY_BOOK__和#endif的话,就说找不到STR_MY_BOOK这个ID,必须放在#ifdef __MY_BOOK__和#endif之间,我就纳闷了?
    -------------------
    这样只是没有编译错误而已啊。
    因为上面我说的原因__MY_BOOK__根本没有被定义也没有包含头文件,所以AddmyId(STR_MY_BOOK,,...);这一句不会参加编译,自然不会报没有定义的错误。#ifndef __MY_BOOK__
    #include "myBook.h"
    #endif
    这样就好了吧
      

  5.   

    不是阿,已经定义了#define __MY_BOOK__
      

  6.   

    请确保
    #define __MY_BOOK__
    放在了myBook.c文件的最开始位置。否则
      

  7.   

    不是阿,已经定义了#define __MY_BOOK__
    -0--------------------------------------
    __MY_BOOK__是在头文件里面定义的,你的头文件由于条件编译的原因都没有被include,这个宏怎么可能被定义了呢你用#pragma message( "message" )加到ifdef里面,看看到底这个条件编译哪些编译到了,哪些没有
    #ifdef __MY_BOOK__
    #pragma message( "__MY_BOOK__ has been defined." )
    #include "myBook.h"
    #endif#ifdef __MY_BOOK__
    AddmyId(STR_MY_BOOK,,...);
    #pragma message( "__MY_BOOK__ has been defined." )
    #endif
      

  8.   

    #define __MY_BOOK__ 
    这个定义是在.c文件,而不在头文件中吗?
      

  9.   

    不管怎么样,你先用#pragma message看看到底怎么回事。