注册 登录
编程论坛 C++教室

某行代码为何编译通不过

chaw899 发布于 2019-07-13 20:29, 1511 次点击
编译环境Mingw,gcc -c test.c报错,去掉注释的那行可以通过。是编译器太老的关系吗?

#include <stdio.h>
#include <stdlib.h>

// #ifndef HAVE_ERRX
static inline void errmsg(char doexit, int excode, char adderr, const char *fmt, ...);
int colormode_or_err(const char *str, const char *errmsg);

#define errx(E, FMT...) errmsg(1, E, 0, FMT)

// #endif

//#ifndef HAVE_ERR_H

static inline void errmsg(char doexit, int excode, char adderr, const char *fmt, ...)
{
   
    fprintf(stderr, "%s: ", "program_invocation_short_name.\n");
    if (fmt != NULL) {
//        va_list argp;
//        va_start(argp, fmt);
//        vfprintf(stderr, fmt, argp);
//        va_end(argp);

        if (adderr)
            fprintf(stderr, ": ");
    }
    if (adderr)
        fprintf(stderr, "%m");
    fprintf(stderr, "\n");
    if (doexit)
        exit(excode);
        
}

int colormode_or_err(const char *str, const char *errmsg)
{
    const char *p = str && *str == '=' ? str + 1 : str;
    int colormode;

    colormode = colormode_from_string(p);
    if (colormode < 0)
        errx(EXIT_FAILURE, "%s: '%s'", errmsg, p);     // 这行为什么编译通不过啊
    return colormode;
}
1 回复
#2
rjsp2019-07-14 11:50
你代码不全(起码colormode_from_string就没有定义),又不肯贴编译给出的错误信息。

errx(EXIT_FAILURE, "%s: '%s'", errmsg, p);
这个宏展开成 errmsg(1,EXIT_FAILURE,0,"%s: '%s'", errmsg, p);
但在 int colormode_or_err(const char *str, const char *errmsg) 这个函数中 errmsg 是 const char* 类型。
1