我一段时间以来一直在使用函数指针。也许你们可以帮帮我。
在我的项目中,同一设备具有多种功能,每种功能均写入其自己的.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
}
答案 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);