Tag: function

如何在C中为PIC24编写硬件无关function

我正在研究一些可以实现各种function的代码,例如PID控制器,信号发生器等。 我的硬件提供各种输入和输出。 刚才我有一个SWITCH语句加载来确定我的计算的来源和目的地。 例如,对于PID控制器,每隔100ms就有一个开关命令决定将哪个输入传递给pid_calculate函数,然后是另一个开关来决定如何处理返回值。 由于我有32个模拟输入,以及can,lin和serial作为可能的输入,因此开关语句非常大! 我想参考或者一个物理示例,说明如何将某些东西编码为独立的硬件(在pic的范围内)function。 我确信答案在于指针,但我是C的新手并不确定从哪里开始指针。 我设想函数原型类似于int pid_init(* source,* destination)其中source是指向输入的指针,例如ADC缓冲区,目标可以是例如pwm占空比寄存器。 刚才我必须切换每个可能的条件然后将数据加载到寄存器中。 因此,为了澄清,我将如何实现一个允许它独立于输入和输出的函数,以及如何取消引用指针(假设指针是正确的方法) 我希望这是有道理的,谢谢你提前。

在C中使用不带括号的参数调用函数?

当函数没有任何参数时,可以通过define as调用它而不用括号 #define test test() 是否可以在没有paranthesis的情况下调用带参数的函数? 就像是 #define test test(char *arg) test “argument 1”;

函数的参数太少而且不能用作函数 – 从C开始

嗨,我是初学者,我有这个功课为我开始C课。 我一直在使用我的函数编写的程序出错。 这是我的计划: #include //Function Declarations double obtainTemp (void); **double convertTemp (double tempF, double tempR, double tempC, double tempK);** void printResult (double tempF, double tempR, double tempC, double tempK); int main (void) { //Local Declarations double tempF; double tempR; double tempC; double tempK; double fahrenheit; double rankine; double celsius; double kelvin; //Calling the functions fahrenheit […]

函数声明顺序在c语言中是重要的还是我做错了什么?

我收到此错误: arthur@arthur-VirtualBox:~/Desktop$ gcc -o hw -ansi hw1.c hw1.c: In function `main’: hw1.c:27:16: warning: assignment makes pointer from integer without a cast [enabled by default] hw1.c: At top level: hw1.c:69:7: error: conflicting types for `randomStr’ hw1.c:27:18: note: previous implicit declaration of `randomStr’ was here 在编译此代码时: #include #include int main(int argc, char** argv) { char *rndStr; rndStr […]

C中的函数调用者(回调)?

所以我想知道它们是如何工作的。 为了解释我的意思是“函数调用者”,我的意思是glutTimerFunc一个很好的例子,它能够接受一个函数作为参数并调用它,即使它不知道它被声明。 它是怎么做到的?

C-检查输入(浮点)是纯整数还是浮点数

我想检查用户输入是纯整数还是浮点数。 我试图通过使用floor和ceilf并将值与函数中的原始x值进行比较来尝试这样做。 然而,这似乎有点问题,因为当floor(5.5)!=5.5和ceilf(5.5)!=5.5时,函数对于某些数字(如5.5)保持返回0而不是1。 这是我的代码: #include #include #include #include #include int intchecker(float x)//in a separate file { if (floor(x)==x && ceilf(x)==x) { //printf(“%f”,floor(x)); return 0; } else { return 1; } } int main() { char line[] = ” +—-+—-+—-+—-+—-+—-+—-+—-+—-+—-+—+”; char numbers[] = ” 0 5 10 15 20 25 30 35 40 45 50″; float […]

函数调用C

可能重复: 为什么gcc允许将参数传递给定义为不带参数的函数? 代码: #include #include void test_print() { printf(“test print\n”); } int main() { test_print(1,2); return 0; } 尽管main中test_print的调用者具有不同数量的参数并且具有该函数的定义,但代码可以很好地工作,但是如果将其更改为c ++版本,则会出现编译错误“funciton的参数太多……”。 。 为什么C允许参数不匹配调用函数,何时可以使用这种调用方式? 以及为什么它在c ++中被禁止。 系统ubuntu 11.10 编译器:gcc 4.6.1

C函数调用无括号

这是一个简单的C程序: #include int main(void) { printf(“Display something\n”); fflush stdout; return 0; } 使用msys2 mingw-w64 gcc版本7.3.0和选项-Wall进行编译,一切正常,就好像第5行是fflush(stdout); 。 我试图用我自己的函数重现这样的调用,但是我得到了完全预期的错误 src/main.c: In function ‘int main(int, char**)’: src/main.c:5:18: error: expected ‘;’ before ‘parameter’ custom_function parameter; ^~~~~~~~~ 那么, fflushfunction会发生什么? 有人可以解释一下吗? 你和其他C编译器有相同的行为吗?

C函数分析(地址似乎已经过时)

我正在尝试使用-finstrument-functions选项来分析函数调用。 基本上,我所做的是将以下内容写入任何编译源: static int __stepper=0; void __cyg_profile_func_enter(void *this_fn, void *call_site) __attribute__((no_instrument_function)); void __cyg_profile_func_enter(void *this_fn, void *call_site) { int i=0; for( ; i<__stepper; i++ ) printf(" "); printf("E: %p %p\n", this_fn, call_site); __stepper ++; } /* __cyg_profile_func_enter */ void __cyg_profile_func_exit(void *this_fn, void *call_site) __attribute__((no_instrument_function)); void __cyg_profile_func_exit(void *this_fn, void *call_site) { int i=0; __stepper –; for( ; […]

检查系统是否实现了某个function

我正在创建一个跨系统的应用程序。 例如,它使用itoa函数,它在某些系统上实现,但不是全部。 如果我只是提供我自己的itoa实现: header.h:115:13: error: conflicting types for ‘itoa’ extern void itoa(int, char[]); In file included from header.h:2:0, from file.c:2:0, c:\path\to\mingw\include\stdlib.h:631:40: note: previous declaration of ‘itoa’ was here _CRTIMP __cdecl __MINGW_NOTHROW char* itoa (int, char*, int); 我知道我可以检查宏是否是预定义的,如果没有定义它们: #ifndef _SOME_MACRO #define _SOME_MACRO 45 #endif 有没有办法检查C函数是否已预先实现,如果没有,请实现它? 或者只是简单地实现一个function?