关于 c语言中的#ifdef

lg2lg 2005-10-20 08:46:18
我最近在学习c语言中,看见一程序开头有
#ifndef LATTICE

但我在程序中未找见 LATTICE 的定义
想请教大家这个东西来自那里
有什么用
我还在程序中找见 DEBUG

...全文
299 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
踏岸寻柳 2005-10-24
  • 打赏
  • 举报
回复
关于#ifdef、#ifndef在不同的地方有不同的用途;
1. 头文件中,防止重复包含;
2. 代码中,针对不同的宏执行不同的语句。

fiftymetre 2005-10-20
  • 打赏
  • 举报
回复
#ifdef UNICODE
#define CF_TCHAR CF_UNICODETEXT
TCHAR szDefaultText[] = TEXT ("Default Text - Unicode Version") ;
TCHAR szCaption[] = TEXT ("Clipboard Text Transfers - Unicode Version") ;
#else
#define CF_TCHAR CF_TEXT
TCHAR szDefaultText[] = TEXT ("Default Text - ANSI Version") ;
TCHAR szCaption[] = TEXT ("Clipboard Text Transfers - ANSI Version") ;

#endif


看了上面的代码你就明白老。:)
rabbitweng 2005-10-20
  • 打赏
  • 举报
回复
这样做我想是为了防止这种情况:
如果文件a include了头文件b,
头文件c也include了头文件b,
如果没有在头文件c中用#ifndef这种条件编译,且你在自己的源程序中同时include头文件a和c,就会出现重复定义文件b中变量的问题,所以一般的头文件(无论是系统还是自定义的)的格式最好是
#ifndef 与此头文件名称相关的一个宏

...(具体头文件内容)

#endif

这样一般就不会出现重复定义某些头文件中的变量的问题了
索思索想 2005-10-20
  • 打赏
  • 举报
回复
一般来说,#ifndef下面应该给出的就是宏定义

程序最后是不是用#endif结束的?
yangyzqo 2005-10-20
  • 打赏
  • 举报
回复
希望能看一些关于预编译方面的资料,说不定有些帮助
goodluckyxl 2005-10-20
  • 打赏
  • 举报
回复
ifndef LATTICE
如果未定义此标号 那么下面的代码就要被编译了
这无所谓只是预编译一些配置
晨星 2005-10-20
  • 打赏
  • 举报
回复
#ifndef LATTICE
的意思就是“如果LATTICE未被定义……”;
此外,你用的应该是VC吧?像VC这种功能比较强大的集成开发环境中,预编译符号也未必只能在源文件中定义,在工程配置文件中也可以定义。
copygirl 2005-10-20
  • 打赏
  • 举报
回复
嗯,主要就是为了防止文件被重复包含的,有时也用在调试中。

前面带有#的宏指令是在编译的时候就被处理的,
有的代码里写#ifdef DEBUG printf("test");
如果在文件头定义了DEBUG: #define DEBUG,则这句会打印一下调试信息:test,否则不执行这句。
相当于if(debug) printf("test");
如果你在前面把debug赋值为非0,则打印test,否则不打印

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧