c - 在 C 中使用嵌套函数

标签 c function gcc nested nested-function

我已经编写了一个由 main 调用的函数。在函数中,我有一个嵌套函数。我编译使用:

gcc -o numericalIntegration numericalIntegration.c TrapezoidRule.c SimpsonsRule. GaussQuad.c -fnested-functions

这是我的梯形规则:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define pi 3.1415927

//Note: This program was taken from the first practical and adjusted for sin instead of tan(x) and the limits of integration changed to o --> pi/3

double degtorad(double);

float TrapezoidRule(int args) {


int i, j; //Loop index, Counter, Array dimension
float area, rad, Sin[args], coeff; //Return value of the function, Result array, Area, Coefficient
 //TODO: Get table of sin as in Ex. 3

        j=0;

        for (i=0; i<=180; i=i+5) {
                rad = degtorad(i);
                Sin[j] = sin(rad);
                j=j+1;
                }

        area = Sin[0];
        for (i = 1; i < args - 1; i++) {
                area = area + 2.0*Sin[i];
                }
 //Calculating the area using the trapezoid rule and comparing to the real area 
        coeff = degtorad(2.5);
       // area = (area + Sin[dim - 1]) * coeff; 

 //Function to convert degrees to radians
    double degtorad(double arg) {
        return( (pi * arg)/180.0 );
    }

        area = (area + Sin[args - 1]) * coeff;

return area;

}

我收到的错误是:

Undefined symbols:
  "_degtorad", referenced from:
      _TrapezoidRule in ccdjbt6m.o
      _TrapezoidRule in ccdjbt6m.o

ld: symbol(s) not found
collect2: ld returned 1 exit status

我是否错误地执行了嵌套函数?

最佳答案

  1. 删除 TrapezoidRule() 定义之前的 degtorad() 声明。
  2. degtorad() 的定义移至 TrapezoidRule() 的开头,或者至少在调用它之前。
<小时/>

如果你想先声明一个嵌套函数,并将其定义放在其包含函数的末尾,你可以这样做:

float TrapezoidRule(int args) {
    auto double degtorad(double);

    coeff = degtorad(2.5);

    double degtorad(double) {
        /* .... */
    }
}

参见6.4 Nested Functions了解更多详情。

关于c - 在 C 中使用嵌套函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21999651/

相关文章:

c++ - fileno, errno : What does the "no" mean?(非母语英语)

c - while(scanf ("%d",&n),n) 是什么意思?

c - Windows FTP 函数 [C]

C++:如何通过删除多个元素来删除 "set"?

c - 在 SPI STM32 中读取 Rx 缓冲区的问题

javascript - 请解释一下这个 javascript 函数的定义及其最佳用途(模块模式)

c++ - CMAKE 库未链接

c - 对于 'C' 程序,常量局部变量数组在内存中的位置

c++ - GCC模板参数模板

计算 C 中连续的 1