/*用来扫描某个具体的端口*/ static void _scan_one(void *arg) { int port = (int)arg; char number_buffer[10]; struct linear_node *linear_node; int ret; int (*scan_func)(int port); sprintf(number_buffer, "%d", port); /*调用全局的函数*/ linear_node = global_scanner; while(linear_node) { if(scan_method == SCAN_GENERAL || ((struct scan_func_info*)linear_node->data)->type == scan_method) { scan_func = ((struct scan_func_info*)linear_node->data)->scan_func; ret = scan_func(port); if(ret == 1) { } } linear_node = linear_node->next; } /*调用注册函数*/ linear_node = (struct linear_node*)hash_get(scanner_table, number_buffer); while(linear_node) { if(scan_method == SCAN_GENERAL || ((struct scan_func_info*)linear_node->data)->type == scan_method) { scan_func = ((struct scan_func_info*)linear_node->data)->scan_func; ret = scan_func(port); if(ret == 1) { } } linear_node = linear_node->next; } }
void sgen_scan_pin_queue_objects (ScanCopyContext ctx) { int i; ScanObjectFunc scan_func = ctx.ops->scan_object; mono_os_mutex_lock (&pin_queue_mutex); for (i = 0; i < pin_queue_objs.next_slot; ++i) { GCObject *obj = (GCObject *)pin_queue_objs.data [i]; scan_func (obj, sgen_obj_get_descriptor_safe (obj), ctx.queue); } mono_os_mutex_unlock (&pin_queue_mutex); }
int main() { int (*scan_func)(int); if (g) scan_func = x; else scan_func = y; if (scan_func) g = scan_func(10); return 0; }