在C中调用参数不带括号的函数?

在C中调用参数不带括号的函数?,c,function,C,Function,当函数没有任何参数时,可以通过defineas调用不带括号的函数 #define test test() 有没有可能调用一个带参数的函数而不带偏执?差不多 #define test test(char *arg) test "argument 1"; 这在C语言中是不可能的。标准(C99)的§6.5.2描述了后缀表达式,没有类似的语法。函数调用是(§6.5.2.2): 后缀表达式后跟括号(),其中可能包含空的、以逗号分隔的表达式列表,这是一个函数调用。后缀表达式表示被调用的函数。表达式列表

当函数没有任何参数时,可以通过
define
as调用不带括号的函数

#define test test()
有没有可能调用一个带参数的函数而不带偏执?差不多

#define test test(char *arg)

test "argument 1";

这在C语言中是不可能的。标准(C99)的§6.5.2描述了后缀表达式,没有类似的语法。函数调用是(§6.5.2.2):

后缀表达式后跟括号
()
,其中可能包含空的、以逗号分隔的表达式列表,这是一个函数调用。后缀表达式表示被调用的函数。表达式列表指定函数的参数

paren不是可选的,它们需要包装所有参数,因此您需要一个类似于宏的函数(需要在“调用”站点使用paren)或两个单独的东西(一个插入起始paren,一个插入结束paren)

你可以做:

#define test puts(
#define end  );
#define int_proc int
#define proc_body {
#define proc_end  }
#define no_args (void)
#include <stdio.h>

int_proc main no_args
proc_body
  test "hello" end
proc_end
通常的使用方法是:

debug() << "this" << "works";
然后,您可以使用强制转换表示法并写入:

(debug) "Hello";
这与你所拥有的非常接近(并且是可以接受的)


然后你可以对所有其他操作符(操作符,将是首选),但是优先规则可能会破坏乐趣。

为什么要这样做?函数优先规则是什么:Is
foo x+bar y
foo(x)+bar(y)
foo(x+bar(y))
?不管怎样,我99%的确定是没有办法在C中做这件事。但是在C++中,可以定义<代码>测试< /C> >作为<代码> STD::StReStWrand():在C中开发高级语言并试图把C转换成高级语言有很大的不同。伪装的C仍然是C,有着所有的缺陷,重新安排函数调用构造以模仿其他语言使用的风格不会改变这一点。如果需要高级语言,请使用高级语言。C+预处理器宏!=高级语言。它是一种低级系统语言和一种低级文本处理语言的结合,两者都有问题。+1:旁观者眼中的恐怖。参见:<代码> AsjtTyeq(期望,实际)@ Ruang:至少该语句类似于一个有效的C++语句。代码>测试“你好”没有,任何使其合法化的东西都是出于这个原因而可怕的。谷歌测试所做的不是IMHO。
debug() << "this" << "works";
debug(char const*msg)
{
    std::cout << msg << " ";
}
(debug) "Hello";