我已经编写了用于读取开关状态的代码,如果按下#是3次则退出.
void allkeypadTest(void)
{
static uint8_t modeKeyCount=0;
do
{
uint8_t key=getKeyStatus();
if(key)
{
if(key=='#')
{
modeKeyCount++;
//pulseIODevice(LED1,1,500,200);
}
else
{
pulseIODevice(LED1,key-0x30,500,200);
}
}
}while(modeKeyCount<3);
}
Run Code Online (Sandbox Code Playgroud)
但是一旦我输入#key一次,循环就会退出.如果按其他键,行为就可以了.但是,如果我pulseIODevice在if(key=='#')部分下取消注释,行为是正常的.pulseIODevice将在特定时间段内将LED切换一定时间并将PWM传递给它.我很困惑我的代码出了什么问题.请注意,如果未检测到任何键,getKeyStatus则返回'\0'(null)并返回1x4键盘键的ASCII值(ASCII值为3,6,9和#)
我猜动态创建的变量必须单独初始化,而不是在分配时初始化。为什么下面这行代码不能编译?为什么我会在 'p' 之前收到错误消息“预期的 ')'”。
*(int *p = malloc(sizeof(int))) = 23;
|
myCout()当我在同一个函数中使用两个不同的命名空间时,为什么我得到错误消息(错误:重载的调用是不明确的)使用using namespace没有完全限定名称空间的指令?
#include <iostream>
using namespace std;
namespace first
{
void myCout(void)
{
cout<<"Hello World is great\n";
}
}
namespace second
{
void myCout(void)
{
cout<<"Hello Sky is high\n";
}
}
int main(void)
{
cout<<"Hello World\n";
using namespace first;
myCout();
using namespace second;
myCout();
return(0);
}
Run Code Online (Sandbox Code Playgroud)
如果我myCout()在下面给出的第二个命名空间中使用完全限定的命名空间,则没有问题
int main(void)
{
cout<<"Hello World\n";
using namespace first;
myCout();
second::myCout();
return(0);
}
Run Code Online (Sandbox Code Playgroud) 我很好奇sizeof(arrayName + offset).它给了我sizeof(pointer).虽然数组名实际上是C中的常量指针,但是sizeof(arrayName)给出了数组的字节大小.所以我猜编译器(arrayName+offset)即使对于纯指针也是如此sizeof(),因此在使用数组名时只会出现异常sizeof(arrayName).
这种行为是否sizeof(arrayName + offset)由编译器很好地定义?我正在使用MinGW 32位编译器.除了使用简单的数学之外,还有什么方法我们可以知道部分数组的大小(sizeof(arrayName) - offset*sizeof(arrayName[0]))吗?
是sizeof(arrayName)不是在C/C++不一致的语言结构?出于所有其他目的,arrayName被视为地址.当我们将数组传递给函数时,这种行为可能会导致错误,初学者总是会遇到这个问题.
我假设如果文件已经打开则fopen返回NULL指针。但如果文件已经打开,它看起来fopen不会返回NULL"w"模式下。下面是我用来尝试这个的代码,我没有收到任何错误。我尝试过 mingw32 以及 TDM-GCC-64 编译器。如果我没记错的话,如果文件已经打开,C++ 会报错。
#include<stdio.h>
int main()
{
FILE *fp1, *fp2;
fp1 = fopen("file1.txt", "w");
fp2 = fopen("file1.txt", "w");
if(fp2 == NULL)
{
printf("Error in opening file\n");
return(0);
}
// Edit: added following code to check the behavior if write operation
// is performed simultaneously
fputc('A', fp1);
fputc('M', fp1);
fputc('S', fp1);
fputc('B', fp2);
fclose(fp1);
fclose(fp2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:增加了额外的代码来写一些数据都fp1和fp2和看到的行为。如果执行,file1.txt包含数据BMS和似乎是正确的行为,fp1并 …
我在查看链接数据类型的数据类型
它被写为char类型是1字节,范围是-128到127或0到255.
编辑:还有一个问题这个C代码有什么问题?.但这不是同一个问题.标题说这个代码有什么问题,搜索不会轻易列出这个答案.人们必须完全分析这个问题才能理解这个问题.
编辑:看了几个答案和评论后,我又有了疑问.双引号内的字符串被视为char.如果我将双引号字符串传递给具有signed char类型参数的函数,我会收到警告.itoa和许多其他库函数也使用char类型参数而不是signed char.当然,类型转换会避免这个问题.那么操作空终止字符串的函数的最佳参数类型是什么(例如LCD显示相关函数)?使用signed char或unsigned char(因为char是实现定义的,我猜它可能不是可移植的)
c ×5
mingw32 ×2
arrays ×1
avr ×1
c++ ×1
declaration ×1
do-while ×1
expression ×1
function ×1
malloc ×1
mingw ×1
namespaces ×1
oop ×1
sizeof ×1