LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 969|回复: 7

关于#define

[复制链接]
发表于 2008-10-17 08:54:35 | 显示全部楼层 |阅读模式
看linux源代码的时候看到#define _POSIX_NO_TRUNC之类的,一般define不是应该_POSIX_NO_TRUNC后面还要再跟个值的吗?那现在这样不跟值,那_POSIX_NO_TRUNC被define的值又是多少呢?是0还是NULL
发表于 2008-10-17 12:47:18 | 显示全部楼层
NULL 其实就是 0

不过这里既不是0也不是NULL,仅仅是为了之后可以使用用
  1. #ifdef _POSIX_NO_TRUNC
复制代码

来判定罢了。
回复 支持 反对

使用道具 举报

发表于 2008-10-23 11:03:05 | 显示全部楼层
一定要注意这个问题,在编译选项中的-DMACRO如果没有=,这时的值其实是1。
回复 支持 反对

使用道具 举报

发表于 2008-10-23 11:05:16 | 显示全部楼层
/* main.c */
#include <stdio.h>
int main(int argc,char**argv)
{
    int i = 0;
    for(i=0;i<argc;i++)
    printf("argv[%d]:%s\n",i,argv);
#ifdef MY_MARCO
    printf("MY_MARCO:%d\n",MY_MARCO);
#endif
    return 0;
}   
gcc main.c
$ ./a.out
argv[0]:./a.out
gcc -DMY_MARCO main.c
$ ./a.out
argv[0]:./a.out
MY_MARCO:1
回复 支持 反对

使用道具 举报

发表于 2008-10-27 11:57:20 | 显示全部楼层
Post by longgyifei;1894967
看linux源代码的时候看到#define _POSIX_NO_TRUNC之类的,一般define不是应该_POSIX_NO_TRUNC后面还要再跟个值的吗?那现在这样不跟值,那_POSIX_NO_TRUNC被define的值又是多少呢?是0还是NULL


只是为了后面条件编译使用
比如后面的代码可以:
#ifdef _POSIX_NO_TRUNC
  代码A
#else
  代码B
#endif

由_POSIX_NO_TRUNC是否定义判断是采用代码A还是代码B
回复 支持 反对

使用道具 举报

发表于 2008-10-30 13:04:48 | 显示全部楼层
Do you mean the the value of it is 1 when you didn't point its value?
回复 支持 反对

使用道具 举报

发表于 2008-11-2 21:55:15 | 显示全部楼层
好贴啊 不错啊 谢谢楼主分享 拉 (*^__^*) 嘻嘻……                        
   
     
      
   
   
  
     
      
------------------------------------------------------------
我又石皮了企业建站足兆槽樶矢豆历史记录,只在虚拟主机上班ろ0紛钟
回复 支持 反对

使用道具 举报

发表于 2008-11-6 21:51:44 | 显示全部楼层

关于编译环境

其实makefile中会有很多的这类符号,经常会需要在makefile定义一个宏,而在程序里去判断宏是否定义?
这个太常见了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表