首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"error: expected or‘before constant“-?

"error: expected or‘before constant“-?
EN

Stack Overflow用户
提问于 2010-11-12 07:17:18
回答 3查看 25.7K关注 0票数 2

标题中的错误出现在该头文件中每个类似函数的宏的“#define”行(从第45行开始)。我做错了什么吗?

代码语言:javascript
复制
#ifndef ASSEMBLER_H
#define ASSEMBLER_H


/* Ports */
#define   Input    0
#define   Output   15

/* Registers */
#define   Z    0
#define   A    1
#define   B    2
#define   C    3
#define   D    4
#define   E    5
#define   F    6
#define   G    7

/* OP Codes */
    /*-----Control--------*/
#define   HLT_OP    0
#define   JMP_OP    1
#define   CJMP_OP   2
#define   OJMP_OP   3
    /*-----Load/Store-----*/
#define   LOAD_OP   4
#define   STORE_OP  5
#define   LOADI_OP  6
#define   NOP_OP    7
    /*-----Math-----------*/
#define   ADD_OP    8
#define   SUB_OP    9
    /*-----Device I/O-----*/
#define   IN_OP     10
#define   OUT_OP    11
    /*-----Comparison-----*/
#define   EQU_OP    12
#define   LT_OP     13
#define   LTE_OP    14
#define   NOT_OP    15

/* Macros */
    /*-----Control--------*/
#define HLT()
  ( HLT_OP << 28 )
#define JMP(address)
  ( (JMP_OP << 28) | (address) )
#define CJMP(address)
  ( (CJMP_OP << 28) | (address) )
#define OJMP(address)
  ( (OJMP_OP << 28) | (address) )
    /*-----Load/Store-----*/
#define LOAD(dest, value)
  ( (LOAD_OP << 28) | ((dest) << 24) | (value) )
#define STORE(dest, value)
  ( (STORE_OP << 28) | ((dest) << 24) | (value) )
#define LOADI(dest, value)
  ( (LOADI_OP << 28) | ((dest) << 24) | (value) )
#define NOP()
  ( NOP_OP << 28 )
    /*-----Math-----------*/
#define ADD(dest, op1, op2)
  ( (ADD_OP << 28) | ((dest) << 24) | ((op1) << 20) | ((op2) << 16) )
#define SUB(dest, op1, op2)
  ( (SUB_OP << 28) | ((dest) << 24) | ((op1) << 20) | ((op2) << 16) )
    /*-----Device I/O-----*/
#define IN(reg)
  ( (IN_OP << 28) | ((reg) << 24) | (Input) )
#define OUT(reg)
  ( (OUT_OP << 28) | ((reg) << 24) | (Output) )
    /*-----Comparison-----*/
#define EQU(reg1, reg2)
  ( (EQU_OP << 28) | ((reg1) << 24) | ((reg2) << 20) )
#    define LT(reg1, reg2)
  ( (LT_OP << 28) | ((reg1) << 24) | ((reg2) << 20) )
#define LTE(reg1, reg2)
  ( (LTE_OP << 28) | ((reg1) << 24) | ((reg2) << 20) )
#define NOT()
  ( NOT_OP << 28 )



#endif
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-12 07:19:32

预处理指令(如#define)以换行符结尾,因此它只能有一行。如果需要多行宏定义,则需要对换行符进行转义:

代码语言:javascript
复制
//                  v Make this the last character on the line
#define NOT()       \
  ( NOT_OP << 28 ) 
票数 11
EN

Stack Overflow用户

发布于 2010-11-12 07:19:35

宏应该写在%1行,而不是% 2行。

这是错误的:

代码语言:javascript
复制
#define NOT()
  ( NOT_OP << 28 )

这是正确的:

代码语言:javascript
复制
#define NOT() ( NOT_OP << 28 )

如果你真的想把它写在多行上,可以使用一个反斜杠来“转义”新行。如下所示:

代码语言:javascript
复制
#define NOT() \
  ( NOT_OP << 28 )
票数 6
EN

Stack Overflow用户

发布于 2010-11-12 07:21:21

嗯..。我猜你不会把#define的替代品放在不同的行里,对吧?

代码语言:javascript
复制
#define JMP(address)
( (JMP_OP << 28) | (address) )

应该是

代码语言:javascript
复制
#define JMP(address) ( (JMP_OP << 28) | (address) )

相反,举个例子。#define声明必须只在一行中,或者在一行的末尾使用\扩展到下一行。

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

https://stackoverflow.com/questions/4160225

复制
相关文章

相似问题

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