C 使用#define设置变量类型

C 使用#define设置变量类型,c,types,C,Types,所以我有一个数学代码,它声明了大量任意类型的变量,这样就可以定义它的精度(double、quad等)。为此,我有一个头文件 输入.h PRECISION detg; detg = 1.0+2; 其中input.h包含在主文件中,如 #include<math.h> #include<stdio.h> #define PRECISION double int main(){ return 0; }

所以我有一个数学代码,它声明了大量任意类型的变量,这样就可以定义它的精度(double、quad等)。为此,我有一个头文件

输入.h

    PRECISION detg;
    detg = 1.0+2;
其中input.h包含在主文件中,如

    #include<math.h>
    #include<stdio.h>
    #define PRECISION double
    int main(){
        return 0;
    }

我的问题是,为什么精度不能像你认为的那样被双精度所取代,为什么它会产生这个错误?

你不能把
detg=1.0+2函数外部。写入
precisiondetg=1.0+2或put
detg=1.0+2在主函数中。

您不能将
detg=1.0+2函数外部。写入
precisiondetg=1.0+2或put
detg=1.0+2在你的主函数中。

你在哪里包括
输入.h
?旁注:最好对变量类型使用
typedef
,而不是
#define
。是的,这听起来像是解决你的问题的工作(或者至少是编译器所指的工作)不是因为
PRECISION
没有替换为double,而是您试图在
detg=1.0+2行中的函数之外使用赋值。在头文件和头文件中实例化数据而不使用include-guard也是不好的做法。您还完全没有显示代码片段中实际包含的内容。您在哪里包含
输入。h
?旁注:最好对变量类型使用
typedef
,而不是
#define
。是的,这听起来像是解决您的问题(或者至少是编译器所指的问题)的工作不是因为
PRECISION
没有替换为double,而是您试图在
detg=1.0+2行中的函数之外使用赋值。在头文件和头文件中实例化数据而不使用include-guard也是不好的做法。您还完全无法在代码片段中显示实际包含的内容。
    In file included from testEquations.c:16:0:
    ./GHG_Files/input.h:3:1: warning: data definition has no type or storage class
    detg = 1.0+2;
    ^
    ./GHG_Files/input.h:3:1: warning: type defaults to ‘int’ in declaration of ‘detg’ [-Wimplicit-int]
    ./GHG_Files/input.h:3:1: error: conflicting types for ‘detg’
    ./GHG_Files/input.h:1:11: note: previous declaration of ‘detg’ was here
     PRECISION detg;