是否可以重写以下内容,因此如果字符串发生变化,我只需要在一个地方进行更改?
#define MY_STRING "Foo bar"
#define MY_STRING_FIRST_CHAR 'F'
Run Code Online (Sandbox Code Playgroud)
以下是不可接受的,因为它引用了内存位置中的char,因此它不能用作switch语句中的大小写:
#define MY_STRING_FIRST_CHAR MY_STRING[0]
switch (something) {
case MY_STRING_FIRST_CHAR:
break;
}
Run Code Online (Sandbox Code Playgroud)
目的是通过查看一个字符来有效地解析收到的字符串.在我的例子中,所有字符串都有一个唯一字符 以下不是我的实际代码,而是一个非常简单的示例来说明原理:
#define COMMAND_LIST "list"
#define COMMAND_LIST_FIRST_CHAR 'l'
#define COMMAND_CHANGE "change"
#define COMMAND_CHANGE_FIRST_CHAR 'c'
#define COMMAND_EXIT "exit"
#define COMMAND_EXIT_FIRST_CHAR 'e'
switch(received_command_string[0]){
case COMMAND_LIST_FIRST_CHAR:
// Do the "list" stuff
break;
case COMMAND_CHANGE_FIRST_CHAR:
// Do the "change" stuff
break;
case COMMAND_EXIT_FIRST_CHAR:
// Do the "exit" stuff
break;
}
Run Code Online (Sandbox Code Playgroud)
用户"pmg"在gcc文档中发现了这一点:"无法将宏参数转换为字符常量."
我希望定义位于包含文件中,可以由多个源文件共享.这是尽可能接近,只有在一个地方定义每个字符:
#include <stdio.h>
#define CH0 'F'
#define CH1 'o'
#define CH2 'o'
#define CH3 ' '
#define CH4 'b'
#define CH5 'a'
#define CH6 'r'
static char MY_STRING[] = { CH0, CH1, CH2, CH3, CH4, CH5, CH6, '\0'};
#define MY_STRING_FIRST_CHAR CH0
void main(void){
printf("The string is %s, the first char is %c\n", MY_STRING, MY_STRING_FIRST_CHAR);
}
Run Code Online (Sandbox Code Playgroud)
我不会那样做.最初的问题是,是否可以共享一个定义以获得字符串常量和字符常量.通过在运行时浪费时钟周期,我的问题有几种解决方案.
小智 -4
#define MY_STRING "Hello"
const char var[] = MY_STRING;
switch(var[0]) {
case 'H':
break;
case 'A':
break;
}
Run Code Online (Sandbox Code Playgroud)
这应该可以解决它。
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |