函数调用的双括号?

vv1*_*133 4 c syntax gcc

请考虑以下代码:

#include <stdio.h>

int aaa(char *f, ...)
{
    putchar(*f);    
    return 0;
}

int main(void)
{
    aaa("abc");
    aaa("%dabc", 3); 
    aaa(("abc"));
    aaa(("%dabc", 3));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么以下几行:

    aaa("abc");
    aaa("%dabc", 3); 
    aaa(("abc"));
Run Code Online (Sandbox Code Playgroud)

运行没有错误,但第四行(见下文):

    aaa(("%dabc", 3));
Run Code Online (Sandbox Code Playgroud)

生成以下错误:

main.c:15:2:警告:传递'aaa'的参数1使得整数指针没有强制转换

main.c:3:5:注意:预期'char*'但参数类型为`int'

Som*_*ude 12

该声明

aaa(("%dabc", 3));
Run Code Online (Sandbox Code Playgroud)

aaa使用("%dabc", 3)返回值的参数调用该函数3.

查找逗号运算符以获取更多信息.

  • 典型示例是调试打印宏,您可以将printf arg列表作为一个参数传递,例如`DEBUG_PRINT(DBG_LEVEL_1,("%s =%d","foo",foo));```DEBUG_PRINT`宏定义为`#define DEBUG_PRINT(level,args)if(level> gDebugLevel)printf args` (2认同)