2015年4月5日日曜日

Cの関数ポインタの書き方

Cの関数ポインタの書き方。

今までたぶん、r = (*f)(1,2);みたいに書いてきた気がするけど、r = f(1,2); みたいに普通の関数を直接呼び出すのと同じ書き方ができる。

でもポインタで*fとfが同じって言うのは違和感あるよね>K&L。

昔からこうなのか、最近の仕様なのか、確認したのはXcode6.2、LLVM。

でも、そもそも2006年2月のとある記事にr=f(1,2)みたいなコードが書いてあったのを見て書き間違い?かと疑問に思ったのが発端なので、K&L時代からそうだったのかが気になるところ。だってf(1,2)って書けるなら何でわざわざ(*f)(1,2)って書くの? そのほうが如何にも関数ポインタだぞ!と叫んでいるから? 確かにそれは一理あるが。


//
//  main.m
//  STAnySome
//
//  Created by Oliva on 2015/04/04.
//  Copyright (c) 2015 Oliva. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int testfunc(int p1, int p2)
{
return p1*p2;
}

int main(int argc, char * argv[]) {

int (*funcp)(int p1,int p2);
funcp = testfunc;
int r = funcp(1,2);
int r2 = (*funcp)(3,4);
NSLog(@"r=%d r2=%d",r,r2);

@autoreleasepool {
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}

}

2015-04-05 11:21:43.967 STAnySome[8447:2118408] r=2 r2=12


0 件のコメント:

コメントを投稿