質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

806閲覧

C言語でtemplateのような方法はありますか

MashuScott

総合スコア18

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

2クリップ

投稿2020/01/29 04:05

C++でテンプレートと言えばこんな感じですが、Cでテンプレートっぽいことってできませんか。
Cで"型だけ違うが同じ処理"をさせたい場合、やはりその処理を行う関数を違う方で複数個書いて行かなきゃいけないでしょうか。

c++

1// C++のテンプレート 2template <typename T> 3const T& max(const T& x, const T& y) 4{ 5 if (x < y) 6 return y; 7 else 8 return x; 9}

c

1// 型違いの同じ処理 2void A(X a){...} 3void A(Y a){...} 4void A(Z a){...}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

Cで"型だけ違うが同じ処理"をさせたい場合、やはりその処理を行う関数を違う方で複数個書いて行かなきゃいけないでしょうか。

ものによってはマクロで実現可能ですが、文字列展開されるので意図しない結果になりうることは要注意です。

C

1#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))

投稿2020/01/29 04:08

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MashuScott

2020/01/29 04:10

ありがとうございます。
guest

0

Cではそうなりますねー
まあ、defineを使って省力化するというテがあるって程度ですね

投稿2020/01/29 04:09

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MashuScott

2020/01/29 04:10

ありがとうございます。
guest

0

C++

1template<typename T> 2T MAX(T x, T y) { return x > y ? x : y; }

コレ↑をマクロで(むりくり)実現するココロミ↓

C

1#define name2(x,y) x##y 2#define declare(x,y) name2(x,declare)(y) 3#define implement(x,y) name2(x,implement)(y) 4 5#define MAXdeclare(type) \ 6type MAX(type)(type x, type y); 7 8#define MAXimplement(type) \ 9type MAX(type)(type x, type y) { \ 10 return x > y ? x : y; \ 11} 12 13#define MAX(type) name2(MAX,type) // MAX(ほげほげ) -> MAXほげほげ 14 15#include <stdio.h> 16 17declare(MAX,int) // int MAXint(int,int) を宣言 18declare(MAX,float) // float MAXfloat(float,float) を宣言 19 20implement(MAX,int) // int MAXint(int,int) を定義 21implement(MAX,float) // float MAXfloat(float,float) を定義 22 23int main() { 24 // MAXint(int,int) を呼ぶ 25 printf("%d, %d -> %d\n", 2, 3, MAX(int)(2,3)); 26 // MAXfloat(float,float) を呼ぶ 27 printf("%f, %f -> %f\n", 2.0f, 3.0f, MAX(float)(2.0f,3.0f)); 28 return 0; 29}

投稿2020/01/29 09:20

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問