gpt4 book ai didi

syntax - 为什么 CMake 语法到处都有多余的括号?

转载 作者:行者123 更新时间:2023-12-04 11:36:45 25 4
gpt4 key购买 nike

CMake的if像这样:

if (condition)
...
else if (...)
...
else (...)
...
endif (...)

else if (...) (...)测试单独的条件。
为什么 else (...)而不仅仅是 else ?为什么 endif (...)而不是 endif ?

Cmake 的功能是这样的:
function(funcname ...)
...
endfunction(funcname ...)

为什么 endfunction(funcname ...)而不仅仅是 endfunction ?

我可以省略它们出现的多余括号的内容,如下所示: endif () .这个构造的目的是什么?

最佳答案

我相信最初的意图是,通过在每个子句(例如,else 语句)重复初​​始表达式(例如,if 语句中的那个),它会更清楚哪个语句实际上是关闭的,并且解析器可以验证并警告没有发生任何错误。

然而,事实证明你会有这样的表达:

if (VARIABLE matches "something")
[...] #This is executed when above condition is true
else (VARIABLE matches "something") #Looks very much like an elseif...
[...] #This is executed when above condition is false!
endif (VARIABLE matches "something")

结果令人困惑。我说的是我每天的经历,例如我写了一些东西,有人来问我“这是做什么的?”

所以,现在 CMake 也允许放空括号,上面可以改写为:
if (VARIABLE matches "something")
[...] #This is executed when above condition is true
else ()
[...] #This is executed when above condition is false
endif ()

哪个可以认为更清楚。上面的语法仍然可以使用。

为了完全回答您的问题,括号中也保留了空参数,因为在概念上 elseendif在 CMake 中是宏,如 if ,因此它们是用这个语法调用的,有点(但不完全是)作为函数。

CMake 常见问题解答中提供了基本相同的解释: Isn't the "Expression" in the "ELSE (Expression)" confusing? .

补充一点历史,在 CMake 2.4 中重复该表达式是强制性的,并且仍然在 CMake 2.6 中。 ,至少根据文档。 else 上的文档含糊不清,但坚持 endif :

Note that the same expression must be given to if, and endif.



CMake 2.4.3(2006 年)已经引入了删除此约束的第一次尝试,可以通过编写以下代码来停用它:
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)

此约束成为完全可选的 CMake 2.8

Note that the expression in the else and endif clause is optional.

关于syntax - 为什么 CMake 语法到处都有多余的括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29959126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com