gpt4 book ai didi

c - 可变参数在 CC 编译器上的 AIX 5.3 中不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:20 26 4
gpt4 key购买 nike

我目前有一堆调试宏(从 Zed 的书 Learn C The Hard Way 劫持),我正试图在 AIX 上编译它们。宏:

#ifndef __dbg_h__
#define __dbg_h__

#include <stdio.h>
#include <errno.h>
#include <string.h>

#ifdef NDEBUG
#define debug(M, s ...)
#else
#define debug(M, s ...) fprintf(stderr, "DEBUG %s:%d: " M "\n", __FILE__, __LINE__, ## s)
#endif

#define clean_errno() (errno == 0 ? "None" : strerror(errno))


#define log_err(M, s ...) fprintf(stderr, "[ERROR] (%s:%d: errno: %s) " M "\n", __FILE__, __LINE__, clean_errno(), ## s)

#define log_warn(M, s ...) fprintf(stderr, "[WARN] (%s:%d: errno: %s) " M "\n", __FILE__, __LINE__, clean_errno(), ## s)

#define log_info(M, s ...) fprintf(stderr, "[INFO] (%s:%d) " M "\n", __FILE__, __LINE__, ## s)

#define check(A, M, s ...) if(!(A)) { log_err(M, ## s); errno=0; goto error; }

#define sentinel(M, s ...) { log_err(M, ## s); errno=0; goto error; }

#define check_mem(A) check((A), "Out of memory.")

#define check_debug(A, M, s ...) if(!(A)) { debug(M, ## s); errno=0; goto error; }

#endif

当我编译导入这些宏的项目时,AIX CC 编译器打印编译器错误和此消息,然后正常退出:

"src/dbg.h", line 13.19: 1506-211 (S) Parameter list must be empty, or consist of one or more identifiers separated by commas.

它将其中一个打印到项目中使用其中一个宏函数的每一行。

我已尝试设置 #pragma langlvl (stdc99)#pragma langlvl (extc99),如 article 中的建议没有成功。

我也写了个小例子看看能不能编译通过,如下:

/* file "test.c" */
#include <stdio.h>

#define PRINTERROR(M, s...) fprintf(stderr, "ERROR MSG: " M "\n", ## s)

int main(void) {
PRINTERROR("no args");
PRINTERROR("with args: %s", "foo");
return 0;
}

编译器发出以下消息:

"test.c", line 4.24: 1506-211 (S) Parameter list must be empty, or consist of one or more identifiers separated by commas.

我正在使用 AIX 5.3CC for AIX version 6.0.0.0

最佳答案

您的代码——无论是原始版本还是使用非标准扩展的编辑版本,请参阅 ouah 的回答——在 AIX 6.1 上使用 XL C/C++ v11.1 对我来说编译得很好。

您声明您的编译器是 CC for AIX version 6.0.0.0。如果那是指“IBM VisualAge C++ Professional for AIX,V6.0”,则该版本为 announced in 2002 ,即不是真正最新的...

可变参数宏在 1999 年才包含在标准中,因此您的编译器版本很可能还不支持它们。

关于c - 可变参数在 CC 编译器上的 AIX 5.3 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33499974/

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