当前位置:  技术问答>linux和unix

关于#if的问题

    来源: 互联网  发布时间:2016-04-08

    本文导语:  我之前定义了#define TESTING 0和#define SINGLETHREAD 1 那么 #if TESTING      printf( "0 frPX Rejt:%d:%*.*s:%s:%d:%d:%sn",getpid(), 1, 1, "1", "1", ilen,ilen,ibuf);      #else      msgLog( "0 frPX Rejt:%d:%*.*s:%s:%d:%d:%sn",getpid(), 1, 1, "...

我之前定义了#define TESTING 0和#define SINGLETHREAD 1

那么
#if TESTING
     printf( "0 frPX Rejt:%d:%*.*s:%s:%d:%d:%sn",getpid(),
1, 1, "1", "1", ilen,ilen,ibuf);
    
#else
     msgLog( "0 frPX Rejt:%d:%*.*s:%s:%d:%d:%sn",getpid(),
1, 1, "1", "1", ilen,ilen,ibuf);
#endif
是不是永远执行#else里的东西?

#ifndef SINGLETHREAD
void quitRunning(int sig)
{
   msgLog("quitRunning %d",getpid());
   if( gpid_recv )
   kill(gpid_recv, SIGQUIT);
   if( gpid_send )
   kill(gpid_send, SIGQUIT);
   if( gpid_send2 )
   kill(gpid_send2, SIGQUIT);
}
#endif
这个里面的语句是不是永远不会执行呢?

|
补充一点:
#if 是测试 后边的值 
而 #ifndef #ifdef只是测试宏是否被定义,而不管你定义的宏的值是什么。

比如

#define ab  3

int main()
{
#ifdef 0                    //错误的方法
printf("abn");            
#endif

#if 0                    //正确的
printf("abn");
#endif

#if 3                    //正确的
printf("abn");           //能被编译执行
#endif

#if ab==3                   //正确的
printf("abn");               //能被编译执行
#endif


#if ab!=3                   //正确的
printf("abn"); 
#endif

#ifdef ab!=3                   //错误的
printf("abn");
#endif

#ifdef ab                  //错误的
printf("abn");
#endif


}
~
你可以这样理解:不符合条件的代码就相当于被你注释掉了。


|
预编译指令,在编译后的目标文件中仅存在其中的一部分:不符合预编译条件的就不会被编译器识别。

|
不是执行,而是那些代码根本不会编译进去.

|
用gcc -E -o test.i test.c做一下预处理,看一下生成的test.i文件,就能有点概念了。
#include、#if、#define这类东西,都是由预处理器处理的。编译器看到的代码就是象test.i那样经过预处理的,#else里面的东西在编译之前已经被预处理器删掉了。

而如果用这样的
if(...)
    printf( "0 frPX Rejt:%d:%*.*s:%s:%d:%d:%sn",getpid(), 1, 1, "1", "1", ilen,ilen,ibuf); 
else 
    msgLog( "0 frPX Rejt:%d:%*.*s:%s:%d:%d:%sn",getpid(), 1, 1, "1", "1", ilen,ilen,ibuf); 
这些代码都会被编译到最后的程序里,在运行时才判断应该执行哪部分。
可以看出来,这样的方案,和用#if相比,可执行文件比较大(因为编译了全部代码),而且运行时会稍慢一点(花时间做判断)

    
 
 

您可能感兴趣的文章:

  • 简单问题:if语句里再写if语句怎么不执行??
  • 问一个简单问题: if (key!=null && key.equals("TT")) 与if (key.equals("TT") && key!=null)这样的条件是相同的么?
  • shell if语句的问题
  • ps -af|awk "{if (\$3==$$){print \$2}}的问题
  • 一个对高手而言简单的IF问题
  • shell脚本问题 if语句
  • shell 脚本里的if遇到问题
  • 菜鸟请教下shell编程中if条件中比较的一个问题
  • 刚学Shell编程,问个关于Shell中if语句的问题
  • shell参数问题 if [ x$current == x$required ]; 中参数前的x是什么意思
  • 关于SHELL编程中的if嵌套问题
  • jsp中if else的问题。请指点。给分!在线等待!!!
  • MYSQL中有关SUM字段按条件统计使用IF函数(case)问题
  • shell脚本的一个问题,if [ -z "${_xarray[${#_xarray[@]}]}" ]
  • 批处理中的if与环境变量的问题
  • <s:if>问题
  • 头痛的急问题:用if做判断,运行结果与实际不符
  • shell编程中if的使用问题
  • 读驱动程序的一些问题关于#if,#ifdef等(初学)
  • 关于linux中if语句出现的问题,~急
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 简单问题简单问题简单问题简单问题
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • 小问题,急问题,重大问题!!!
  • sharepoint 2010中item.Update()和item.SystemUpdate 修改数据版本问题解决
  • 弱弱的一问,linux下的中文问题及网络问题,分不是问题
  • 八个问题帮你快速了解Docker
  • 请教两个小问题:一个cgywin下使用vi的问题,另一个socket的问题
  • 错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决
  • 网页的编码问题!或者java的编码问题,由此引出一条解决中文问题的思路
  • nginx Windows版相关问题及使用说明
  • 死锁的问题 多级锁定问题 循环锁定问题
  • 关于linux中if语句出现的问题,~急 iis7站长之家
  • [问题]双系统出现的问题!求问题的原因和解决办法!
  • Linux下时钟同步问题:Clock skew detected原因分析及解决方法
  • 初学者问题。一个是编译hello world的问题,一个是配置ssh的问题
  • c/c++服务器程序内存泄露问题分析及解决
  • C程序问题:哪个高手帮我解释下下面的问题,主要是a[0]和&[0] 的区别 和编译器的问题??
  • ​部署 Docker 前必须问自己的四个问题
  • swing的问题还是jbuiler的问题??
  • spring的事务类型及spring和hibernate可能导致的问题分析
  • 菜鸟第一次安装红帽子7.2的一箩筐问题。每个问题会开个帖子,各放100分!请有安装经验的老鸟们帮忙解决。第二个问题:什么是LILO?怎么样


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3