假设我在头文件中定义了一个常量
#define THIS_CONST 'A'
我想把这个常量写入一个流。我做类似的事情:
char c = THIS_CONST;
write(fd, &c, sizeof(c))
但是,为了简洁明了,我希望做的是:
write(fd, &THIS_CONST, sizeof(char)); // error
// lvalue required as unary ‘&’ operand
有谁知道获取指向文字的指针的任何宏/其他技巧?我想要一些可以像这样使用的东西:
write(fd, PTR_TO(THIS_CONST), sizeof(char))
注意:我意识到我可以将我的常量声明为静态常量变量,但是我不能在 switch/case 语句中使用它们。即
static const char THIS_CONST = 'A'
...
switch(c) {
case THIS_CONST: // error - case label does not reduce to an integer constant
...
}
除非有办法在 case 标签中使用 const 变量?
最佳答案
在 C89 中无法直接执行此操作。您将不得不使用一组宏来创建这样的表达式。
在 C99 中,允许声明结构或 union 文字,并且可以使用类似的语法编写标量的初始值设定项。因此,有一种方法可以达到预期的效果:
#include <stdio.h>
void f(const int *i) {
printf("%i\n", *i);
}
int main(void) {
f(&(int){1});
return 0;
}
关于c - 指向文字值的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1564701/