c - 指向文字值的指针

标签 c

假设我在头文件中定义了一个常量

#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/

相关文章:

c - 取消引用指向不完整类型的指针 ‘struct'

c - 我正在研究图的连通性。为什么我会遇到段错误 : 11?

c - 只读取txt文件中的值

c - scanf 之后 fgets 不起作用

c - 如何实现整数数组的二进制搜索?

c - CUDD 的 bool 表达式解析器

c - 包含 <signal.h> 错误,缺少库

C套接字编程: get IP address (IPv6 or IPv4) server bounds to, 与客户端连接到?

c - 有效地附加一个带有零的大数组?

c - 链接来自不同共享对象 (.so) 文件的同名符号