当前位置:  开发笔记 > IOS > 正文

C函数似乎没有在任何地方定义!

如何解决《C函数似乎没有在任何地方定义!》经验,为你挑选了1个好方法。

我正在查看vim源代码,特别是文件normal.c,我看到这个函数nv_operator正在使用,但它没有在任何地方定义(我grepped整个src目录)

它只被声明为:

static void nv_operator __ARGS((cmdarg_T *cap));

我查了__ARGS的定义,但它只是......
在vim.h中没有(几乎没有):

#define __ARGS(x) x

那么可能会发生什么?这是某种C创建虚拟函数的技术吗?



1> Johannes Sch..:

这里有一个定义:

/*
 * Handle an operator command.
 * The actual work is done by do_pending_operator().
 */
    static void
nv_operator(cap)
    cmdarg_T    *cap;
....

这种定义方式是使用标识符列表作为参数.该样式已弃用(过时)但仍可在C中使用.标识符在参数列表中命名,其类型在紧跟函数声明符之后但在函数体之前的声明中命名.

__ARGS宏是有处理的编译器不知道有关函数的原型(其他形式申报参数-类型名称直接在函数参数列表相结合).据我所知,它在声明中根本不会发出任何参数.

更新:请参阅以下代码vim.h:

#if defined(MACOS) && (defined(__MRC__) || defined(__SC__))
   /* Apple's Compilers support prototypes */
# define __ARGS(x) x
#endif
#ifndef __ARGS
# if defined(__STDC__) || defined(__GNUC__) || defined(WIN3264)
#  define __ARGS(x) x
# else
#  define __ARGS(x) ()
# endif
#endif

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有