gpt4 book ai didi

c - 在不同的头文件中定义 ARGS 有什么用?

转载 作者:太空宇宙 更新时间:2023-11-04 07:39:27 24 4
gpt4 key购买 nike

所以我一直在研究一些代码,有些东西我无法理解。我有两个头文件。一个称为“args.h”,其中包含以下语句:

#if (defined(__cplusplus) || defined(__STDC__) || defined(c_plusplus))
#define NEW_STYLE 1
#define VOID void
#define ARGS(parenthesized_list) parenthesized_list
#else
#define NEW_STYLE 0
#define VOID
#define ARGS(parenthesized_list) ()
#define const
#endif

#if !defined(EXIT_SUCCESS)
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
#endif

在另一个头文件中,函数原型(prototype)是这样声明的:

#if defined(__cplusplus)
extern "C" {
#endif

extern void yyerror ARGS((const char *s_));
extern int yylex ARGS((void));
extern int yyparse ARGS((void));
extern int yywrap ARGS((void));

#if defined(__cplusplus)
}
#endif

还有一些其他的东西。

所以我的问题是:

1> #define const 到底做了什么?

2> 为什么在另一个头文件中声明了arg?我们不能像普通的 extern void a(const char *s__) 那样简单地声明这些函数吗?或者这仅仅是一种风格偏好?

谢谢。

最佳答案

这是为了允许代码使用准标准 C 编译器进行编译。它将函数原型(prototype)变成函数声明,并简单地完全删除 const

如果您需要使用一个非常古老的编译器,它不理解原型(prototype)或 const,您别无选择,只能使用这样的东西。否则,您通常最好消除这些可怕的困惑。

20 年前,像这样的代码是常见且必要的。今天似乎很难原谅,但我想可能仍然有一些平台没有相当现代的编译器。

关于c - 在不同的头文件中定义 ARGS 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5627451/

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