C是否支持可选的null参数?

end*_*ith 4 c null optional-parameters function-parameter function-declaration

在Python中,我习惯了类似的东西

def send_command(command, modifier = None):
Run Code Online (Sandbox Code Playgroud)

然后modifier参数是可选的,并且参数的缺失可以与参数0区分开来.在C中是否有类似的功能?我没有C和Googling的经验,但是找不到如何在C中使用可选参数的明确声明.看起来你可以类似地分配它们,如下所示:

void send_command(uint8_t command, uint8_t modifier = 0) {
Run Code Online (Sandbox Code Playgroud)

所以第二个参数是可选的,如果不使用则默认为0? (编辑:不,无论如何这是无效的C)

但功能可以区分send_command(SOMETHING)send_command(SOMETHING, 0)?理想情况下,第二个参数可以是任何uint8值,包括0.

也许NULL与0不同?

void send_command(uint8_t command, uint8_t modifier = NULL) {
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 10

C不支持可选参数.它也不支持通常用于类似效果的函数重载.

  • 正确.这在C++中被称为默认参数. (3认同)

R..*_*R.. 9

可变参数在C99中可以使用可变参数宏:

#define JUST3(a, b, c, ...) (a), (b), (c)
#define FUNC(...) func(JUST3(__VA_ARGS__, 0, 0))
Run Code Online (Sandbox Code Playgroud)

现在FUNC(x)扩展到func((x), (0), (0)),FUNC(x,y)扩展到func((x), (y), (0))等等

  • 我不是要哭还是笑 (7认同)
  • 不幸的是,`FUNC(x,y,z,t)`扩展为`func((x),(y),(z))`而不是错误.我觉得重要的是,只是*稍微*惩罚那些想要超载的人.当他们最不期望的时候. (2认同)