📅  最后修改于: 2023-12-03 14:59:38.289000             🧑  作者: Mango
在C语言中,宏和预处理器是非常重要的概念。宏是一种在编译时进行文本替换的机制,它可以帮助编程人员快速定义常量、函数和类似函数的代码块等。预处理器是在编译器实际编译代码之前执行所必需的操作,其中包括宏替换、条件编译、头文件包含等操作。
本篇文章将聚焦于宏和预处理器的问题12。
下面给出了一个宏定义,该宏在将输入转换为小写字母后将其输出到标准输出。请问在使用这个宏时,下列哪些函数调用的结果输出的是"hello, world!"?
#define TOLOWER(c) (c >= 'A' && c <= 'Z' ? c + 'a' - 'A' : c)
printf("Hello, World!\n");
printf("hello, world!\n");
printf("hELLO, wORLD!\n");
printf("%s\n", "Hello, World!");
printf("%s\n", "hello, world!");
printf("%s\n", "hELLO, wORLD!");
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
TOLOWER('H'), TOLOWER('e'), TOLOWER('l'), TOLOWER('l'), TOLOWER('o'), TOLOWER(','),
TOLOWER(' '), TOLOWER('w'), TOLOWER('o'), TOLOWER('r'), TOLOWER('l'), TOLOWER('d'), TOLOWER('!'));
这个宏定义为TOLOWER(c)。它将输入转换为小写字母并输出到标准输出。由于这个宏定义是不区分大小写的,所以下列函数调用输出的结果都是"hello, world!"。
#include <stdio.h>
#define TOLOWER(c) (c >= 'A' && c <= 'Z' ? c + 'a' - 'A' : c)
int main(){
printf("Hello, World!\n");
printf("hello, world!\n");
printf("hELLO, wORLD!\n");
printf("%s\n", "Hello, World!");
printf("%s\n", "hello, world!");
printf("%s\n", "hELLO, wORLD!");
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
TOLOWER('H'), TOLOWER('e'), TOLOWER('l'), TOLOWER('l'), TOLOWER('o'), TOLOWER(','),
TOLOWER(' '), TOLOWER('w'), TOLOWER('o'), TOLOWER('r'), TOLOWER('l'), TOLOWER('d'), TOLOWER('!'));
return 0;
}
输出结果:
Hello, World!
hello, world!
hELLO, wORLD!
Hello, World!
hello, world!
hELLO, wORLD!
hello, world!