我试图在Visual Studio中执行以下代码:
int main()
{
float f1 = 15.23;
char *ptr = &f1;
printf("%c", *(ptr));
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译错误:错误C2440:'初始化':无法从'float*__ w64'转换为'char*'
这有什么具体原因吗?为什么不允许这样做?
我正在尝试为其他人编写的模块修复Misra警告。我观察到++正在对进行操作enum。
我提到了关于同一主题的SE问题。如何解决此错误?我是否需要建议模块所有者来更改实现?
#include <stdio.h>
typedef enum
{
COMPARE = 0,
INCONSISTENT = 10,
WRITE,
READ,
FINISHED
}TestsType;
static TestsType CurrentTest;
void fun1(void)
{
if(READ != CurrentTest)
{
CurrentTest++;
}
else
{
CurrentTest = FINISHED;
}
}
int main(void) {
// your code goes here
CurrentTest = COMPARE;
fun1();
printf("%d", CurrentTest);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我将enum这样的代码故意保留在代码中以了解任何影响。但是,在实际代码中,如下所示。
typedef enum
{
COMPARE,
INCONSISTENT,
WRITE,
READ,
FINISHED
}TestsType;
Run Code Online (Sandbox Code Playgroud) 如果我使用 execl 是可能需要时间完成的子进程,我什么时候需要使用 waitpid?
当我在父级中使用 waitpid 时,它让我的孩子运行,因为 waitpid 的返回值为 0。一段时间后,我试图在另一个函数中使用 waitpid,它用 ECHILD 返回 -1。如果我不确定天气孩子是否完成,我应该什么时候使用 waitpid?
//pid_t Checksum_pid = fork();
Checksum_pid = fork();
if (Checksum_pid == 0)
{
execl(path, name, argument as needed, ,NULL);
exit(EXIT_SUCCESS);
}
else if (Checksum_pid > 0)
{
pid_t returnValue = waitpid(Checksum_pid, &childStatus, WNOHANG);
if ( returnValue > 0)
{
if (WIFEXITED(childStatus))
{
printf("Exit Code: _ WEXITSTATUS(childStatus)") ;
}
}
else if ( returnValue == 0)
{
//Send positive response with routine status running (0x03)
printf("Child process …Run Code Online (Sandbox Code Playgroud) 致力于优化代码。将宏类型转换char为减少内存消耗是个好主意吗?这样做可能有什么副作用?
例子:
#define TRUE 1 //non-optimized code
sizeof(TRUE) --> 4
#define TRUE 1 ((char) 0x01) //To optimize
sizeof(TRUE) --> 1
#define MAX 10 //non-optimized code
sizeof(MAX) --> 4
#define MAX ((char) 10) //To optimize
sizeof(MAX) --> 1
Run Code Online (Sandbox Code Playgroud) 我已经定义了MACRO,它将调用该函数并传递参数。对于这种情况,低于 MISRA 警告。难道不允许吗?如何避免这种情况?
调用下面的函数有什么优点MACRO?
#define REPORT_ERROR(Id, Error) ReportErr((uint16)21, (uint8)0, (uint8)Id, (uint8)Error)
void ReportErr(uint16 ModuleId, uint8 InstanceId, uint8 ApiId, uint8 ErrorId)
{
// function - body
}
Run Code Online (Sandbox Code Playgroud) 我试图用 unsigned long long 数据类型在 C 中声明 64 位变量,但它不起作用并且行为类似于 uint32 位变量。访问/检查 32 以上位的解决方案是什么?
#include <stdio.h>
#include <stdint.h>
int main() {
// Write C code here
printf("Hello world");
unsigned long long temp = 0x1234567890123456ULL;
unsigned long long temp2 = temp >> 1;
uint64_t var = 0x1234567890123456;
printf("\n%x", (long long) temp);
printf("\n%x", (long long) temp2);
printf("\n%x", 1ULL << 31ULL);
printf("\n%x", 1ULL << 32ULL);
printf("\n%x", var);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
你好,世界
90123456
48091a2b
80000000
0
90123456
我想在不使用if else语句的情况下实现三元运算符。需要使用按位运算符而不使用三元运算符和if else语句来实现。
a= true --> res = b
a= false --> res = c
Run Code Online (Sandbox Code Playgroud) 我找到了在quora上做到这一点的方法,但我无法理解.
You can achieve this using opcodes.....
const int main[] = { -443987883, 440, 113408, -1922629632, 4149, 899584, 84869120, 15544, 266023168, 1818576901, 1461743468, 1684828783, -1017312735};
Now follow below steps....
Save that in hello.c
then gcc -o hello hello.c
then ./hello
Hola..... Hello World!
Run Code Online (Sandbox Code Playgroud)
操作码将根据其架构特定于特定硬件和控制器.如果我理解正确,那么对于不同的硬件和平台,操作码将是不同的.所以这不是一般的解决方案.但是我试图在IDEone上编译它并且它给出了运行时错误.有没有通用的解决方案?
我有这样的问题:
char *ptr;
float f1 = 12.34;
Run Code Online (Sandbox Code Playgroud)
现在使用这个char*ptr,我想将这个float值转换为string,可以使用这个指针"ptr"在printf中显示.
表示:12.34 ==>"12.34"
我不需要使用任何其他指针或临时变量.我不能用snprintf.