C语言【C18】

auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、inline、int、long、register、restrict、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while、_Alignas、_Alignof、_Atomic、_Bool、_Complex、_Generic、_Imaginary、_Noreturn、_Static_assert、_Thread_local

C18关键字: 

auto、break、case、char、const、
continue、default、do、double、else、

enum、extern、float、for、goto、
if、inline、int、long、register、

restrict、return、short、signed、sizeof、
static、struct、switch、typedef、union、

unsigned、void、volatile、while、_Alignas、
_Alignof、_Atomic、_Bool、_Complex、_Generic、

_Imaginary、_Noreturn、_Static_assert、_Thread_local

运算符:

1. 算术运算符:+、-、*、/、%(加、减、乘、除、取模)
2. 关系运算符:>、<、>=、<=、==、!=(大于、小于、大于等于、小于等于、等于、不等于)
3. 逻辑运算符:&&、||、!(与、或、非)
4. 位运算符:&、|、^、~、<<、>>(按位与、按位或、按位异或、按位取反、左移、右移)
5. 赋值运算符:=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=(赋值、加等于、减等于、乘等于、除等于、取模等于、按位与等于、按位或等于、按位异或等于、左移等于、右移等于)
6. 条件运算符:? :(三目运算符)
7. 其他运算符:sizeof(返回变量或数据类型的大小)、&(返回变量的地址)、*(指针变量声明时使用,表示指向某个地址的指针)

 连接运算符:

                          ##是连接运算符,它可以将两个标识符连接成一个新的标识符。

#define NAME(x) name_##x
#define VAR(x) int var_##x

那么在使用时,可以这样写:

NAME(1) // 等价于 name_1
VAR(2) // 等价于 int var_2

关键字作用:

sizeof  //获取对象占用内存字节数,用法 int big = sizeof(int);

类型//内存占用字节
    值类型
            double
            
            float
            int
            

    字符型
           char


    用户类型
            enum
            struct
            union

修饰
    auto
    const
    extern
    long
    register
    short
    signed
    unsigned
    void
    volatile


restrict



static、switch、typedef、while、_Alignas、_Alignof、_Atomic、_Bool、_Complex、_Generic、_Imaginary、_Noreturn、_Static_assert、_Thread_local

C18如何输出变量的名字:

#define STR(x) #x
#define PRINT_VAR_NAME(x) printf("变量名为:%s\n", STR(x))

int main() {
    int a = 10;
    PRINT_VAR_NAME(a); // 输出:变量名为:a
    return 0;
}

字符串名启动同名函数:

在C语言中,可以通过函数指针来实现通过字符串名启动同名函数的功能。具体实现步骤如下:

1. 定义函数指针类型,例如:
   ```
   typedef void (*FuncPtr)(void);
   ```

2. 定义同名函数,例如:
   ```
   void func1(void) {
       printf("This is func1.\n");
   }
   
   void func2(void) {
       printf("This is func2.\n");
   }
   ```

3. 将同名函数的函数指针存储到一个哈希表中,例如:
   ```
   #define MAX_FUNC_NUM 10
   
   static const char* func_names[MAX_FUNC_NUM] = {"func1", "func2"};
   static FuncPtr func_ptrs[MAX_FUNC_NUM] = {func1, func2};
   
   static int hash(const char* str) {
       int hash_val = 0;
       while (*str) {
           hash_val = (hash_val << 5) + *str++;
       }
       return hash_val;
   }
   
   static FuncPtr get_func_ptr(const char* func_name) {
       int index = hash(func_name) % MAX_FUNC_NUM;
       if (strcmp(func_names[index], func_name) == 0) {
           return func_ptrs[index];
       }
       return NULL;
   }
   ```

4. 通过字符串名获取同名函数的函数指针,并调用该函数,例如:
   ```
   const char* func_name = "func1";
   FuncPtr func_ptr = get_func_ptr(func_name);
   if (func_ptr != NULL) {
       (*func_ptr)();
   }
   ```

你可能感兴趣的:(单片机,c语言)