假设我在头文件中定义了一个常量
#define THIS_CONST 'A'
Run Code Online (Sandbox Code Playgroud)
我想把这个常量写成一个流.我做的事情如下:
char c = THIS_CONST;
write(fd, &c, sizeof(c))
Run Code Online (Sandbox Code Playgroud)
不过,我会喜欢的简洁和清晰要做的是:
write(fd, &THIS_CONST, sizeof(char)); // error
// lvalue required as unary ‘&’ operand
Run Code Online (Sandbox Code Playgroud)
有谁知道获取指向文字的指针的任何宏/其他技巧?我想要一些可以这样使用的东西:
write(fd, PTR_TO(THIS_CONST), sizeof(char))
Run Code Online (Sandbox Code Playgroud)
注意:我意识到我可以将我的常量声明为静态const变量,但是我不能在switch/case语句中使用它们.即
static const char THIS_CONST = 'A'
...
switch(c) {
case THIS_CONST: // error - case label does not reduce to an integer constant
...
}
Run Code Online (Sandbox Code Playgroud)
除非有办法在案例标签中使用const变量?
ale*_*cov 30
在C89中无法直接执行此操作.您必须使用一组宏来创建这样的表达式.
在C99中,允许声明struct-or-union文字,并且可以使用类似的语法编写标量的初始化器.因此,有一种方法可以达到预期的效果:
#include <stdio.h>
void f(const int *i) {
printf("%i\n", *i);
}
int main(void) {
f(&(int){1});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Fra*_*e_C 11
这些答案都过时了,除了评论之外,没有人提到最近的语言更新。
在使用复合文字的 C99-C11 编译器上,http://en.cppreference.com/w/c/language/compound_literal可以创建指向无名常量的指针,如下所示:
int *p = &((int){10});
Run Code Online (Sandbox Code Playgroud)