用C宏定义常量变量

用C宏定义常量变量,c,enums,macros,constants,c-preprocessor,C,Enums,Macros,Constants,C Preprocessor,我正试图用一个宏定义一个“变量”,这个宏以后可以用作常量……我现在已经没有主意了,不知道是否有人能告诉我我是否遗漏了什么: 这是我最初编写的代码,但C不将“name”识别为常量 qv 我的下一次尝试是编写一个宏,该宏将#为我定义值…但编译器抱怨嵌入的#:“错误:‘#’后面没有宏参数” qv 在^this-^链接,ybungalobill声称v-this-v有效。。。但事实并非如此 #define DECL(hash, name, value) hash define name (value)U

我正试图用一个宏定义一个“变量”,这个宏以后可以用作常量……我现在已经没有主意了,不知道是否有人能告诉我我是否遗漏了什么:

这是我最初编写的代码,但C不将“name”识别为常量 qv

我的下一次尝试是编写一个宏,该宏将#为我定义值…但编译器抱怨嵌入的#:“错误:‘#’后面没有宏参数” qv

在^this-^链接,ybungalobill声称v-this-v有效。。。但事实并非如此

#define DECL(hash, name, value)  hash define name (value)UL  
DECL(#, FOO, 0xFFFFFFFF)
我设法用这个枚举技巧编译了我的代码(灵感来自第一个链接)…它在我的计算机上工作,但由于这个问题最终是关于创建可移植代码[可在语言和平台之间移植!]我担心值的大小和签名性。qv

以下是一些可能使用上述FOO值的代码行:

int array[FOO];
static const unsigned long int  BAR = FOO + 1 ;
int main (void) {
    unsigned long int  var1 = FOO;
    printf("%d - %d\n", FOO, sizeof(FOO));
}

您的问题与宏没有任何关系

我试图定义一个“变量”[…],以后可以用作常量值

您不能将此变量用作初始值设定器

这将是一个变量


进一步阅读:

您的问题与宏没有任何关系

我试图定义一个“变量”[…],以后可以用作常量值

您不能将此变量用作初始值设定器

这将是一个变量


进一步阅读:

您的问题与宏没有任何关系

我试图定义一个“变量”[…],以后可以用作常量值

您不能将此变量用作初始值设定器

这将是一个变量


进一步阅读:

您的问题与宏没有任何关系

我试图定义一个“变量”[…],以后可以用作常量值

您不能将此变量用作初始值设定器

这将是一个变量


进一步阅读:

宏定义不能包含预处理器指令,因此不能定义扩展到另一个
\define
的内容

C中的
const
关键字并不表示“常量”;它的意思是“只读”。“常量”表达式是可以在编译时计算的表达式。
const
对象的值不能修改。例如:

const int r = rand();
r
const
,这意味着初始化后不能修改它,但它不是“常量”(不能是常量,因为
rand()
返回的值要到运行时才能确定)

使用常量表达式作为初始值设定项不会改变这一点。(它在C++中)

在C中定义命名常量的常用方法是直接将其定义为宏。例如,而不是

#define DECL(name,value)  #define name (value)UL
DECL(FOO, 0xFFFFFFFF)
只要写下:

#define FOO 0xFFFFFFFFUL
对于
int
类型的常量的特殊情况,可以使用
enum
声明:

enum { max = 1000 };

这定义了匿名枚举类型和该类型的常量
max
max
int
类型的常数。由于历史原因,它被定义为这样;如果
max
是枚举类型(就像在C中一样),可能会更有意义,但它不是。

宏定义不能包含预处理器指令,因此不能定义扩展到另一个
\define
的对象

C中的
const
关键字并不表示“常量”;它的意思是“只读”。“常量”表达式是可以在编译时计算的表达式。
const
对象的值不能修改。例如:

const int r = rand();
r
const
,这意味着初始化后不能修改它,但它不是“常量”(不能是常量,因为
rand()
返回的值要到运行时才能确定)

使用常量表达式作为初始值设定项不会改变这一点。(它在C++中)

在C中定义命名常量的常用方法是直接将其定义为宏。例如,而不是

#define DECL(name,value)  #define name (value)UL
DECL(FOO, 0xFFFFFFFF)
只要写下:

#define FOO 0xFFFFFFFFUL
对于
int
类型的常量的特殊情况,可以使用
enum
声明:

enum { max = 1000 };

这定义了匿名枚举类型和该类型的常量
max
max
int
类型的常数。由于历史原因,它被定义为这样;如果
max
是枚举类型(就像在C中一样),可能会更有意义,但它不是。

宏定义不能包含预处理器指令,因此不能定义扩展到另一个
\define
的对象

C中的
const
关键字并不表示“常量”;它的意思是“只读”。“常量”表达式是可以在编译时计算的表达式。
const
对象的值不能修改。例如:

const int r = rand();
r
const
,这意味着初始化后不能修改它,但它不是“常量”(不能是常量,因为
rand()
返回的值要到运行时才能确定)

使用常量表达式作为初始值设定项不会改变这一点。(它在C++中)

在C中定义命名常量的常用方法是直接将其定义为宏。例如,而不是

#define DECL(name,value)  #define name (value)UL
DECL(FOO, 0xFFFFFFFF)
只要写下:

#define FOO 0xFFFFFFFFUL
对于
int
类型的常量的特殊情况,可以使用
enum
声明:

enum { max = 1000 };
这定义了匿名枚举类型和该类型的常量
max
max
int
类型的常数。由于历史原因,它被定义为这样;如果
max
是枚举类型(就像在C中一样),可能更有意义,但它不是。

宏定义