【问题标题】:Does anyone know what is this "typedef long long int (stoll_t)(const char *, char **, int);"? [duplicate]有谁知道这是什么“typedef long long int (stoll_t)(const char *, char **, int);”? [复制]
【发布时间】:2019-02-16 17:31:26
【问题描述】:

我正在浏览一个代码库并找到了这个

typedef long long int (stoll_t)(const char *, char **, int); 

不知道它是做什么的? 以及如何调用这个函数?

在代码中是这样的

long long int argtoll( const char *str, const char **end, stoll_t stoll); //this 

【问题讨论】:

  • ASHOK SINGH,当您浏览代码库时,还发布以后使用 stow 将有助于证明具体答案。将stow 的一些后来使用发布到问题并澄清问题。
  • 很好,您正在改进您的问题,但long long int argtoll( const char *str, const char **end, stoll_t stoll); 不包含stow。发布一些使用stow的代码。
  • @chux 感谢您指出这一点。请再看看是否可以提供帮助?

标签: c c++14


【解决方案1】:

typedef long long int (stow)(const char *, char **, int);stow 定义为一个类型。

那个类型是function (pointer to const char, pointer to pointer to char, int) returning long long int

long long int example_function_of_that_type(const char *a, char **b, int c) {
  if (a == NULL) return 1;
  if (b == NULL) return 2;
  return c;
}

【讨论】:

  • 更好地解释如何使用这种类型,因为声明是不言自明的
  • @P__J__ 也许,但鉴于 OP 的问题含糊不清,我想而不是关于 typedef 函数指针的教程,我会坚持直接回答 OP 的问题。当您感到有动力时,请乐于修改。
  • 这个函数怎么调用? long long int argtoll( const char *str, const char **end, stoll_t stoll);这就是代码中的样子。
  • @chux 它不是函数指针
  • @P__J__ 是的,我没有回答 stow 是一个函数指针。
【解决方案2】:

它定义了函数类型的别名

它的工作方式类似于 extern 函数声明的较短版本。

示例:

#include <stdio.h>

typedef int (stow)( int);

int main(void) {
    // your code goes here
    stow x;

    printf("%d\n", x(5));
    return 0;
}

x 必须在其他(或相同的编译单元)中定义。

几乎没用(至少我找不到它的任何真正用途)——但它肯定会使代码更难阅读。所以唯一的用处就是代码混淆或者不隐藏函数指针。

stow *y; - 不在 typedef 中隐藏函数指针。

大多数程序员实际上更喜欢 typedef 指向函数的指针。

stow argtoll;

argtoll(/*... actual parameters */);

【讨论】:

    猜你喜欢
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 2013-09-25
    • 1970-01-01
    相关资源
    最近更新 更多