免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 融化的冰山
打印 上一主题 下一主题

请教关于C99中传递消息给别的进程的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-01-08 16:42 |只看该作者
原帖由 albcamus 于 2007-1-8 16:39 发表


应该不是宏的问题,因为编译加上-D__USE_POSIX也是一样的。


不过这个宏在c99下确实没有定义.

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
12 [报告]
发表于 2007-01-08 17:16 |只看该作者
干嘛不用sigaction代替呢?

论坛徽章:
0
13 [报告]
发表于 2007-01-08 17:20 |只看该作者
在features.h里定义了一些重要的宏。
如果使用了-std=c99,那么就只有
    #define __USE_ANSI
    #define __USE_ISOC99
被定义。

    #define __USE_POSIX
    #define __USE_POSIX2
    #define __USE_POSIX199309
    #define __USE_POSIX199506
    #define __USE_MISC
    #define __USE_BSD
    #define __USE_SVID

等都被取消定义了。

NetBSD下,/usr/include里没有features.h。看来这也是与系统有关的差异。

论坛徽章:
0
14 [报告]
发表于 2007-01-08 17:39 |只看该作者
所有的答案都在/usr/include/features.h里。

如果使用了-std=c99,那么编译器就会定义 __STRICT_ANSI__ ,导致__USE_POSIX被禁用。
默认情况下(在不指定任何std,没定义任何宏的时候),
_SVID_SOURCE,   _BSD_SOURCE, and _POSIX_SOURCE set to one and _POSIX_C_SOURCE set to   199506L.

所以,楼主的问题,应该可以通过在命令行上加 -D_POSIX_SOURCE解决(具体我没试,希望楼主试一下--我没有LINUX的运行环境了)。

在这一点上,BSD的做法和LINUX显然不同。

论坛徽章:
0
15 [报告]
发表于 2007-01-08 17:42 |只看该作者
原帖由 assiss 于 2007-1-8 17:39 发表
所有的答案都在/usr/include/features.h里。

如果使用了-std=c99,那么编译器就会定义 __STRICT_ANSI__ ,导致__USE_POSIX被禁用。
默认情况下(在不指定任何std,没定义任何宏的时候),
_SVID_SOURCE,   _B ...


我也看到这个了

怎么解决C99问题是关键.

论坛徽章:
0
16 [报告]
发表于 2007-01-08 17:57 |只看该作者
原帖由 flw2 于 2007-1-8 17:42 发表


我也看到这个了

怎么解决C99问题是关键.

已经解决了。
由于使用-std=c99,就会使得其它宏定义被忽略。
所以只需要在源代码里加上以下宏定义(在所有#include之前,或者在命令行上):
_SVID_SOURCE,   
_BSD_SOURCE,
_POSIX_SOURCE set to one

and _POSIX_C_SOURCE set to   199506L(使用最新的POSIX标准值,比如The number 200112L indicates currently valid version of POSIX, IEEE Std. 1003.1-2001.).

论坛徽章:
0
17 [报告]
发表于 2007-01-09 08:55 |只看该作者
原帖由 assiss 于 2007-1-8 17:39 发表
所有的答案都在/usr/include/features.h里。

如果使用了-std=c99,那么编译器就会定义 __STRICT_ANSI__ ,导致__USE_POSIX被禁用。
默认情况下(在不指定任何std,没定义任何宏的时候),
_SVID_SOURCE,   _B ...



我试验了一下,只要加上
#define _POSIX_C_SOURCE 199506L
编译的时候就不会报warning了。

但是,当加入这个宏定义以后,无论编译的时候,加不加-std=c99,编译出来的可执行代码,反汇编出来的结果完全一样,也就是说如果指定了这个宏,那么-std=c99这个选项就完全不起作用了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP