用于定义数字的数字常量之前的预期非限定id

时间:2014-12-17 11:39:43

标签: c++ syntax c-preprocessor

我是C ++的新手,所以我不知道在phidget-code示例中这个错误意味着什么:

  

Main.cpp:8:16:错误:数字常量之前的预期unqualified-id

//verander de volgende informatie naar de informatie voor jouw database

#define dserver "oege.ie.hva.nl"
#define duser "username"
#define dpassword "password"
#define ddatabase "databasename"

#define homeid 1234 //line 8

是否存在语法错误?或者是其他东西?我使用#define而不是int。

编辑:添加了完整的错误日志..

  

完成错误记录:http://pastebin.com/3vtbzmXD

     

完整的main.cpp代码:http://pastebin.com/SDTz8vni

2 个答案:

答案 0 :(得分:20)

完整错误是

error: expected unqualified-id before numeric constant
 note: in expansion of macro ‘homeid’
string homeid;
       ^

您尝试声明与宏名称相同的变量,但无法完成。预处理器已经踩过程序,将其转换为string 1234;,这不是一个有效的声明。预处理器不了解程序结构,宏不遵循语言的范围规则。

尽可能使用常量和内联函数等语言功能而不是宏。在这种情况下,您可以使用

const int homeid = 1234;

这将在全局命名空间中作用域,并且可以安全地被更窄范围内具有相同名称的内容隐藏。即使在隐藏时,它也始终可用::homeid

当你真的需要一个宏时,遵循使用SHOUTY_CAPS宏的约定是明智的。除了提请注意与宏观使用相关的潜在危险和诡计之外,它还不会使用其他大写字母与任何名称发生冲突。

答案 1 :(得分:8)

那条线很好。

最有可能发生的事情是,编译器不是抱怨宏定义本身,而是关于宏的 use 。例如:

#define homeid 1234

void homeid() {
}

用GCC编译时,我得到:

so.cc:1:16: error: expected unqualified-id before numeric constant
 #define homeid 1234
                ^
so.cc:3:6: note: in expansion of macro ‘homeid’
 void homeid() {
      ^

这告诉你提示投诉的数字常量是宏定义的一部分,但是第3行的使用(在这种情况下看似偶然)是宏。看看宏扩展来自你的代码。