哪个预处理器是正确的?[英] Which preprocessor is correct?

问题描述

如果你有:
#define errno retrieve_errno_func()

#define SUBSYSTEM_INCLUDE(子系统,文件) <子系统/包含/文件>
那么当你这样做时会发生什么:
#include SUBSYSTEM_INCLUDE(posix, errno.h)

gcc2.95 按预期进行预处理,以:

#include <posix/include/errno.h>

gcc3.4预处理为:

#include <posix/include/retrueve_errno_func()>

我的猜测是 gcc3.4 是正确的,尽管它没有
产生预期的结果.

推荐答案

7 月 24 日下午 4:03,Tomás ó héilidhe <t...@lavabit.com 写道:
如果你有:

#define errno retrieve_errno_func()
除非retrieve_errno_func 是扩展为a
的类函数宏可修改的左值,这是错误的.

7 月 24 日下午 4:18*,vipps...@gmail.com 写道:
7 月 24 日下午 4:03,Tomásóhéilidhe <t...@lavabit.com 写道:如果你有:
* *#define errno retrieve_errno_func()

除非retrieve_errno_func 是扩展为a
的类函数宏可修改的左值,这是错误的.
为什么?

fnegroni schrieb:
7 月 24 日下午 4:18,vipps...@gmail.com 写道:
>7 月 24 日下午 4:03,Tomás ó héilidhe <t...@lavabit.com 写道:如果你有:
>>#define errno retrieve_errno_func()
除非retrieve_errno_func 是一个类似函数的宏扩展为一个
可修改的左值,否则这是错误的.

为什么?
因为 errno 必须是左值可修改的.

错误号 = 0;

当 errno 扩展为

时将不起作用foob​​ar() = 0;

问候,
约翰内斯

--
"Wer etwas kritisiert muss es noch lange nicht selber besser k?nnen.埃斯
reicht zu wissen, da?anderes besser k?nnen und anderes auch
besser machen um einen Vergleich zu Bringen."- 沃尔夫冈·格柏
在 de.sci.electronics <47****************************@news.freenet.de>

本文地址:https://www.itbaoku.cn/post/1050709.html