Saya memiliki sepotong kode C tempat saya mendefinisikan beberapa struktur data pada tipe dasar. Saya ingin mendefinisikan tipe fundamental ini melalui makro agar dapat diubah, sesuatu yang ala:
#define F_TYPE float // will use float as the fundamental type
// #define F_TYPE double // will use double instead
Sebagai konsekuensinya, saya perlu melakukan sedikit pemilihan fungsi yang tepat tergantung pada jenisnya. Misalnya, untuk float
saya harus menggunakan fabsf
dari <cmath>
, tetapi untuk double
saya harus menggunakan fabs
. Sesuatu yang ala:
#if (F_TYPE == float)
#define F_TYPE_ABS(x) fabsf(x)
#elif (F_TYPE == double)
#define F_TYPE_ABS(x) fabs(x)
#else
#error "need to specify math functions to use with type F_TYPE"
#endif
Tapi ini sepertinya tidak berhasil: kompiler saya memberikan peringatan seperti itu:
In file included from tests_vec3.cpp:2:0:
../src/kiss_clang_3d.h:27:16: warning: "double" is not defined, evaluates to 0 [-Wundef]
#define F_TYPE double
^
../src/kiss_clang_3d.h:32:6: note: in expansion of macro ‘F_TYPE’
#if (F_TYPE == float)
^~~~~~
../src/kiss_clang_3d.h:32:16: warning: "float" is not defined, evaluates to 0 [-Wundef]
#if (F_TYPE == float)
^~~~~
Adakah yang tahu bagaimana saya bisa membuat sesuatu seperti ini berhasil? Kemungkinan besar saya melewatkan sesuatu tentang bagaimana saya harus menggunakan makro.
_Generic
tidak tidak berfungsi? - person H Walters   schedule 24.04.2021