在外部文件(C)中填充函数指针数组

时间:2018-07-03 09:48:35

标签: c arrays pointers function-pointers extern

我一段时间以来一直在使用函数指针。也许你们可以帮帮我。

在我的项目中,同一设备具有多种功能,每种功能均写入其自己的.c文件中。通用功能(适用于所有设备功能)是用generic.c编写的。

我想在通用c文件中创建一个函数指针数组,然后将该数组填充到其他函数文件中。因此,我可以根据通用文件中的设备功能标识符来调用正确的功能。

我现在所拥有的:

// in generic.h:
typedef void (*func_ptr_t[])(arguments);
extern func_ptr_t devFunctions[3];

我想:

// in function1.c:
#include "generic.h"

devFunctions[1] = &functionName;

但是随后它抱怨缺少类型说明符,并且数组初始化程序必须是一个列表。如果我添加类似

的类型
func_ptr_t devFunctions[1] = &functionName;

我收到有关不完整元素类型'func_ptr_t'的错误。

我无法从一个文件初始化整个数组列表,因为它是由多个文件填充的。

有人知道如何解决这个问题吗?

谢谢!

-edit-

因为您不能在函数之外使用语句,所以我更改了应用程序。现在,它不再使用数组,并且在调用特定的函数文件时更新了generic.c中的函数指针。

所以最终结果:

generic.h中:

typedef void (*func_ptr_t)(<function arguments>)

generic.c:

func_ptr_t devFunction;

在function1.c中:

#include "generic.h"
extern func_ptr_t devFunction;

void functionToBeCalledFromMain( void ){
    devFunction = functionName;
}

void functionName (void ){
    // Function to be called from generic.c via function pointer
}

3 个答案:

答案 0 :(得分:1)

正如大多数人所指出的那样,填充数组是一条不能放在函数之外的语句(duh ...)。因此,在这种情况下,我想要的并不是真正起作用。我重写了我的应用程序,以便在每次运行我需要的函数时更新一个函数指针(不再是数组)。省去了很多麻烦:)

谢谢大家!

答案 1 :(得分:0)

将以上注释放在一起,您可能想要

typedef void (*func_ptr_t)(arg_type_list);

答案 2 :(得分:0)

有关类型from googleapiclient.discovery import build from oauth2client.service_account import ServiceAccountCredentials SERVICE_ACCOUNT_EMAIL = "client-name@client-name.iam.gserviceaccount.com" PK12_FILE = "./private-key-original-filename.p12" PK12_PASSWORD = "notasecret" SCOPES = ['https://www.googleapis.com/auth/drive'] def create_directory_service(user_email): credentials = ServiceAccountCredentials.from_p12_keyfile( SERVICE_ACCOUNT_EMAIL, PK12_FILE, PK12_PASSWORD, scopes=SCOPES ) credentials = credentials.create_delegated(user_email) return build('drive', 'v3', credentials=credentials) bryan = create_directory_service('domain-user@your-domain.com') results = bryan.files().list( pageSize=10, fields="nextPageToken, files(id, name, mimeType, parents)" ).execute() items = results.get('files', []) print(items) 的函数的示例,您可以检查:

$args = array(
        'taxonomy'=> 'product_category',
        'order'    => 'DESC',
        );
$categories = get_categories($args);
print_r($categories);