对于上下文,我希望更加“包容”,而不仅仅是仅限于逐项列出该类型的所有实例
#define SPANISH 'es_MX:es'
#define FRENCH 'fr_CA:fr'
#define ENGLISH 'en_CA:en'
在 awk 中,我可以做
MYLANG = sprintf("%2s", LANG)
我想做那么简单的事情,所以我可以做
//awk syntax for sprintf
#define MYLANG {simple}
仅获取字符串 LANG 的前 2 个字符。
有什么我可以用的吗?
在 C 中,没有与 #define 指令中使用的 sprintf 函数直接等效的函数,因为 #define 指令是预处理器指令,并且不具备执行格式化字符串等运行时操作的能力。
但是,您可以通过使用预处理器字符串连接手动定义具有 LANG 前两个字符的字符串来实现您的目标。以下是如何做到这一点的示例:
#define SPANISH LANG[0] == 'e' && LANG[1] == 's' ? "es_MX:es" : ""
#define FRENCH LANG[0] == 'f' && LANG[1] == 'r' ? "fr_CA:fr" : ""
#define ENGLISH LANG[0] == 'e' && LANG[1] == 'n' ? "en_CA:en" : ""
LANG[0]和LANG[1]用于访问LANG字符串的前两个字符。三元条件运算符 ? : 用于检查前两个字符是否与所需的语言代码匹配,如果匹配,则定义相应的字符串,否则定义空字符串。这样,您就可以根据 LANG 的前两个字符获得您想要的行为。
以下是如何使用它...
const char* LANG = "es_MX:es";
int main() {
printf("%s\n", SPANISH);
printf("%s\n", FRENCH);
printf("%s\n", ENGLISH);
return 0;
}
代码应该输出