首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图构建FVWM95的预处理错误

试图构建FVWM95的预处理错误
EN

Stack Overflow用户
提问于 2015-02-06 19:05:22
回答 1查看 53关注 0票数 0

试图构建fvwm95-2.0.43f,我得到以下错误:

代码语言:javascript
复制
FvwmIconBox.c: In function 'myErrorHandler':
FvwmIconMan.c:412:1: error: pasting "." and "res" does not give a valid preprocessing token

操作系统是Debian,Wheezy和Jessie。我最好的猜测是,自从FVWM95问世以来,这可能只是gcc处理预处理器语法方式的一个小变化,但不确定。

在这里获取源:http://sourceforge.net/projects/fvwm95/files/fvwm95/

谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-06 19:15:12

嗯,粘贴实际的行和预处理器宏可能是有用的,因为我们都喜欢下载在过去12.5年中从未见过变化的tgz:

代码语言:javascript
复制
#define SET_MANAGER(manager,field,value)                           \
   do {                                                            \
     int id = manager;                                             \
     if (id == -1) {                                               \
       for (id = 0; id < globals.num_managers; id++) {             \
     globals.managers[id].##field = value;                     \
       }                                                           \
     }                                                             \
     else if (id < globals.num_managers) {                         \
       globals.managers[id].##field = value;                       \
     }                                                             \
     else {                                                        \
       ConsoleMessage ("Internal error in SET_MANAGER: %d\n", id); \
     }                                                             \
   } while (0)

L. 412:

代码语言:javascript
复制
SET_MANAGER (manager, res, r);

你说得对:这是在过去十年中突然发生的“小变化”;)

来自https://gcc.gnu.org/onlinedocs/cpp/Concatenation.html

但是,不能将两个未在一起形成有效令牌的令牌粘贴在一起。例如,不能按任一顺序将x与+连接起来。如果您尝试,预处理器发出警告并发出这两个令牌。它是否在令牌之间放置空白还没有定义。在复杂宏中发现不必要的‘##’用法是很常见的。如果收到此警告,很可能可以简单地删除“##”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28372968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档