在C语言中,需要将函数参数或逻辑条件拆分成多行时是否需要反斜杠字符(\)?
In C, is the backslash character (\) required when one needs to split arguments of functions or logical conditions into multiple lines?
我最近看到了这段代码:
static HAL_StatusTypeDef Program_Flash_Page(uint32_t const page_address, \
void* const pBufferData, uint32_t const nBufferSize) {
uint32_t Address = page_address;
uint64_t *DATA_64 = (uint64_t *) pBufferData;
while (Address < (page_address + nBufferSize)) {
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, Address, *DATA_64) == \
HAL_OK) {
Address = Address + 8;
DATA_64++;
}
else {
return HAL_ERROR;
}
}
return HAL_OK;
}
如您所见,反斜杠用于在多行中显示参数列表和逻辑条件。
正如我从 Kernighan 和 Ritchie(第 2 版,第 A.12.2 段,第 207 页)那里了解到的那样,在预处理过程中“通过删除反斜杠和以下换行符来折叠以反斜杠 \ 字符结尾的行”。
我仍然不清楚的是,这种语法是否是强制性的,或者是否可以在编码时使用换行符(按回车键)。
除 Gerhardh 提到的定义多行宏外,斜线是可选的。
#include <stdio.h>
//valid macro
#define BAR(x, y, z) printf("%d %c %f\n", \
x, \
y, \
z);
//invalid macro, this won't compile if uncommented
/*
#define BAR(x, y, z) printf("%d %c %f\n",
x,
y,
z);
*/
void foo(int x, char y, float z) {
printf("%d %c %f\n", x, y, z);
}
int main() {
//valid
foo(5, \
'c', \
0.0f);
//also valid
foo(5,
'c',
0.0f);
//even use of the macro without slashes is valid
BAR(5,
'c',
0.0f);
return 0;
}
我最近看到了这段代码:
static HAL_StatusTypeDef Program_Flash_Page(uint32_t const page_address, \
void* const pBufferData, uint32_t const nBufferSize) {
uint32_t Address = page_address;
uint64_t *DATA_64 = (uint64_t *) pBufferData;
while (Address < (page_address + nBufferSize)) {
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, Address, *DATA_64) == \
HAL_OK) {
Address = Address + 8;
DATA_64++;
}
else {
return HAL_ERROR;
}
}
return HAL_OK;
}
如您所见,反斜杠用于在多行中显示参数列表和逻辑条件。
正如我从 Kernighan 和 Ritchie(第 2 版,第 A.12.2 段,第 207 页)那里了解到的那样,在预处理过程中“通过删除反斜杠和以下换行符来折叠以反斜杠 \ 字符结尾的行”。
我仍然不清楚的是,这种语法是否是强制性的,或者是否可以在编码时使用换行符(按回车键)。
除 Gerhardh 提到的定义多行宏外,斜线是可选的。
#include <stdio.h>
//valid macro
#define BAR(x, y, z) printf("%d %c %f\n", \
x, \
y, \
z);
//invalid macro, this won't compile if uncommented
/*
#define BAR(x, y, z) printf("%d %c %f\n",
x,
y,
z);
*/
void foo(int x, char y, float z) {
printf("%d %c %f\n", x, y, z);
}
int main() {
//valid
foo(5, \
'c', \
0.0f);
//also valid
foo(5,
'c',
0.0f);
//even use of the macro without slashes is valid
BAR(5,
'c',
0.0f);
return 0;
}