是否可以重写以下内容,因此如果字符串发生变化,我只需要在一个地方进行更改?
#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' …Run Code Online (Sandbox Code Playgroud)