Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C VisualStudio中是否有等效的语句表达式?_C_Visual Studio_Gcc - Fatal编程技术网

C VisualStudio中是否有等效的语句表达式?

C VisualStudio中是否有等效的语句表达式?,c,visual-studio,gcc,C,Visual Studio,Gcc,GCC具有station表达式功能,允许将宏定义为: #define maxint(a,b) \ ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 这在VisualStudio中是非法的 microsoft visual studio中是否有类似的功能? (我知道,我最好使用GCC。但我只是好奇) 或者,我们只需要求助于内联函数吗?< /P> < P>在MS编译器中没有等价于非标准GCC语言扩展。< /P> < P>如果您使用C++,我

GCC具有station表达式功能,允许将宏定义为:

#define maxint(a,b) \
   ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
这在VisualStudio中是非法的

microsoft visual studio中是否有类似的功能? (我知道,我最好使用GCC。但我只是好奇)


或者,我们只需要求助于内联函数吗?< /P> < P>在MS编译器中没有等价于非标准GCC语言扩展。< /P> < P>如果您使用C++,我相信可以使用lambda函数:

#define maxint(a,b) \
   ([=] () {int _a = (a), _b = (b); return _a > _b ? _a : _b; }())

内联函数不一定是最后的手段。使用模板,您可以获得类似的性能和类型安全性。我哪天都愿意。等等,这和
a>b有何不同?a:b
?他还使用C而不是C++,所以模板不是一个选项。@塞思,你的宏评估twice@DavidHeffernan啊,好的,谢谢。更正:这不是“这在Visual Studio中是非法的”,而是“这在C(或C++)中是不允许的”。然而,简单的答案是否定的。如果你想要一个内联函数,那就是你应该使用的。但是linux内核在代码中使用非标准的C功能不是很奇怪吗?这使得内核代码即使在除gcc之外的标准C编译器中也不可编译。这正是Linux所走的道路。内核与应用程序有着不同的驱动力。Visual Studio是否支持C中的lambda函数?哦,对不起,没有查看“C”标记,而且无论如何这是不一样的,例如,在语句表达式中,可以从函数返回,但不能使用lambda返回。那么,为什么不只是:``int maxint(int a,int b){return a>b?a:b;}``@chen3feng函数在调用和返回时有开销。除非它们是内联的,这将在问题的最后一行中讨论。