.h文件在C中的异常使用

Artin:

在阅读有关过滤的文章时,我发现.h文件的一些奇怪用法-用它来填充系数数组:

#define N 100 // filter order
float h[N] = { #include "f1.h" }; //insert coefficients of filter
float x[N];
float y[N];

short my_FIR(short sample_data)
{
  float result = 0;

  for ( int i = N - 2 ; i >= 0 ; i-- )
  {
    x[i + 1] = x[i];
    y[i + 1] = y[i];
  }

  x[0] = (float)sample_data;

  for (int k = 0; k < N; k++)
  {
    result = result + x[k]*h[k];
  }
  y[0] = result;

  return ((short)result);
}

那么,使用float h[N] = { #include "f1.h" };这种方式是正常的做法吗?

Basile Starynkevitch:

预处理指令喜欢#include只是在做一些文字替换(见GNU的文档CPPGCC)。它可以发生在任何地方(注释和字符串文字之外)。

但是,a #include应该#作为其行的第一个非空白字符。所以你要编码

float h[N] = {
  #include "f1.h"
};

原始问题没有#include单独的代码,因此代码有误。

这不是正常的做法,但是是允许的做法。在这种情况下,我建议使用其他扩展名,.h例如use #include "f1.def"#include "f1.data"...

要求编译器向您显示预处理的表单。使用GCC进行编译,gcc -C -E -Wall yoursource.c > yoursource.i并使用编辑器或寻呼机查看生成的内容yoursource.i

实际上,我更喜欢在自己的源文件中包含此类数据。因此,我建议h-data.c使用诸如GNU awk之类的工具生成一个自包含文件(这样文件h-data.c将以...开头const float h[345] = {和结尾};)。如果它是一个常量数据,则最好对其进行声明const float h[](这样它就可以放在read中) -段,例如.rodata在Linux上)。另外,如果嵌入的数据很大,则编译器可能会花一些时间(无用地)对其进行优化(然后您可以在h-data.c不进行优化的情况下快速编译)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C-使用.h文件

使用“.h”文件中的结构

使用try-catch块从文件中读取行以获取异常C ++

在.h和.c文件中定义功能

目标C:在.h文件中创建对象

在 C++ 中的另一个 .h 文件中使用类中的方法

使用c ++文件处理从文件读取时发生异常错误

关于C编程中的.c文件和.h文件?

使用静态库(.a)中的头文件(.h)

C如何显示所有未使用的功能(包括在h文件中定义的功能)

从.h5文件加载图像数据,在Python 3.5和h5py中显示异常颜色

c ++ makefile未检测到.h文件中的更改

C ++ .cpp文件看不到.h中的变量

无法从main引用.cpp和.h文件中的函数。C ++

我是C ++的初学者。我在Visual Studio 2019(C ++ 17)中研究它,我已经在.h文件中定义了一个类,但是在另一个.h文件中我无法使用它

如何强制cppstyle使用c和h文件?

在C中使用dirent.h读取和选择文件

继承C ++中的异常

C中的浮点异常

如何在不使用GCC中的limit.h头文件的情况下编译C程序?

如何使用命令行在C ++中编译和链接分隔的.h和.cpp文件?

C的文件IO的行为异常

文件中的Java输入异常

使用JNI时如何获取C ++中Java异常的描述?

使用等待处理任务中的 C# 异常

如何使用C ++捕获antlr4中的解析异常?

找不到间歇文件,使用NetOffice创建Excel文件(C#)检索COM类的异常

.h文件中的变量与Objective-C中的.m文件相反

使用文件正文在服务器上载图像中找不到文件异常