我在Stack Overflow中读到,将C文件包含到另一个C文件中并不是最佳做法.我想知道如何在C中创建模块化应用程序.
我知道你建议包含的所有内容都是头文件,它不包含代码实现本身,只包含"函数调用".
编译器如何知道在哪里找到相应的代码?它会自动查找与.h文件同名的.c文件吗?
一般来说,如何在C应用程序中分离代码?
我正在为一个嵌入式系统编写驱动程序,该系统运行自定义版本的修改后的linux(它是一个手工扫描器).制造商提供自定义Eclipse Juno发行版,其中包含一些库和示例入站.
我从comport收到的输出是标准字符数组的形式.我使用数组中的单个字符来传达信息(错误ID和错误代码),如下所示:
if (tmp[i] == 250])
Run Code Online (Sandbox Code Playgroud)
其中tmp是char形式的字符数组,tmp[500];首先被初始化为0然后填充来自comport的输入.
我的问题是:
假设我遍历数组的每一部分,在数组结束之前的任何时候使用0(如何\0)都是安全的吗?假设我是:
int数组一样使用它)我问的原因是因为我有几个同事告诉我,我不应该\0在结束之前使用包含的字符数组,无论情况如何.
我这样做的代码目前按预期执行,但我不确定它是否会在以后引起问题.
重写它以避免这种行为将是一件非常重要的工作.
printf 是一个很棒的功能,因为它可以帮助您以非常干净的方式格式化字符串.
printf("Player %s has lost %d hitpoints", victim.name, damage);
Run Code Online (Sandbox Code Playgroud)
是否有类似的方法连接和执行强制在"正常字符串",如下所示:
uint8_t myString = ("Player %s has lost %d hitpoints", victim.name, damage); //SOMETHING LIKE THIS
Run Code Online (Sandbox Code Playgroud) 请在阅读结束之前说:"哦不,这个问题又来了......"
我现在正坐在C课程中,课程书中提供了以下示例:
#include <stdio.h>
#include <stdint.h>
void Terminal_PrintData(uint16_t * const Data);
int main(void){
uint16_t StringData[] = "MyData";
Terminal_PrintData(StringData);
}
void Terminal_PrintData(uint16_t * const Data)
{
printf("Value: %s", *Data);
}
Run Code Online (Sandbox Code Playgroud)
当我编译这个杰作时,这就是我得到的:
F:\AVR Microcontroller>gcc -o test test.c
test.c: In function 'main':
test.c:7:26: error: wide character array initialized from non-wide string
uint16_t StringData[] = "MyData";
Run Code Online (Sandbox Code Playgroud)
我的问题是:
uint16_t?