我试图详细了解静态和外部函数之间的区别.
我知道静态和外部内联函数之间的基本区别.
如果错误,请纠正我的理解:
下面是一个示例代码,我对此行为感到困惑.
在file1.c
#include <stdio.h>
#include "file.h"
int main(void)
{
fun1();
return 0;
}
static inline void fun1(void)
{
int i;
for (i = 0; i < 10; i++) {
static int k = 20;
printf("Value : %d \n", k++);
}
}
Run Code Online (Sandbox Code Playgroud)
file2.c中
#include <stdio.h>
inline void fun1(void)
{
int i;
int k = 0;
for (i = 0; i < 10; i++) {
printf("Value : %d \n", k++);
}
}
Run Code Online (Sandbox Code Playgroud)
file.h
#ifndef FILE_H …Run Code Online (Sandbox Code Playgroud) 我有一个可变数据,我希望最后一位为 1,其余位为 0,我使用软约束编写了它。
class ABC;
rand bit [3:0] data;
// This constraint is defined as "soft"
constraint c_data {
soft data == 0;
data[0] == 1;
}
endclass
module tb;
ABC abc;
initial begin
abc = new;
abc.randomize();
$display ("data = %0b", abc.data);
end
endmodule
Run Code Online (Sandbox Code Playgroud)
我希望输出为'b0001,但实际输出为 data = 1101”
我试图从我的代码中删除规则11.3.
示例代码:
static int32_t
do_test(const char *cp)
{
const char *c = cp;
const int32_t *x;
x = (const int32_t *)cp;
return *x;
}
Run Code Online (Sandbox Code Playgroud)
我希望*c和*x的值相同.即使代码正在编译并给出正确的值,"x =(int32_t*)cp;" 导致违反11.3和11.8
规则11.3违规:具有指针类型的对象不应转换为指向不同对象类型的指针.
我已尝试使用void指针,但结果与我的预期不一样,并且还导致了额外的违规.
反正有没有删除这些违规行为?
从MISRA C 2012文档中可以看出,这个规则有一个例外,因为它允许将指向对象类型的指针转换为指向对象类型char,signed char或unsigned char之一的指针.标准保证可以使用指向这些类型的指针来访问对象的各个字节.
由于char类型而忽略Dir 4.6.
我试图从我的代码中删除违规规则9.1.
规则9.1:具有自动存储持续时间的对象的值在设置之前不应被读取
示例代码:
#include <stdint.h>
#include <stdbool.h>
#define VAL 0xABCDEFABU
int32_t main(void);
static int32_t do_test(bool k);
static void func(uint64_t *var3, const uint64_t *var5);
int32_t
main (void)
{
bool b = false;
int32_t y = do_test(b);
return y;
}
static int32_t
do_test(bool k)
{
uint64_t i = 0, var4[10];
int32_t result = 0;
for(i = 0U; i < 10U; i++) {
var4[i] = VAL + i;
}
if(k == false) {
uint64_t var2[10];
func(var2, var4);
if(var2[9] == var4[9]) {
result = …Run Code Online (Sandbox Code Playgroud)