• C18【关键字】


    autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifinlineintlongregister、restrict、returnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile、_Alignas、_Alignof、_Atomic、_Bool、_Complex、_Generic、_Imaginary、_Noreturn、_Static_assert、_Thread_local

    C18关键字: 

    1. autobreakcasecharconst
    2. continuedefaultdodoubleelse
    3. enumexternfloatforgoto
    4. ifinlineintlongregister
    5. restrict、returnshortsignedsizeof
    6. staticstructswitchtypedefunion
    7. unsignedvoidvolatilewhile、_Alignas、
    8. _Alignof、_Atomic、_Bool、_Complex、_Generic、
    9. _Imaginary、_Noreturn、_Static_assert、_Thread_local

    运算符

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

     连接运算符:

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

    1. #define NAME(x) name_##x
    2. #define VAR(x) int var_##x
    3. 那么在使用时,可以这样写:
    4. NAME(1) // 等价于 name_1
    5. VAR(2) // 等价于 int var_2

    特殊操作:

    1. C18编译器是C语言的一种编译器,它具有一些特殊的操作,包括:
    2. 1. __asm:用于嵌入汇编代码。
    3. 2. __attribute__:用于指定变量或函数的属性,如对齐方式、可重入性等。
    4. 3. __interrupt:用于定义中断服务函数。
    5. 4. __far和__near:用于指定变量或函数的存储类型,如远程存储、近程存储等。
    6. 5. __packed:用于指定结构体或联合体的对齐方式,使其紧凑排列。
    7. 6. __data16和__code16:用于指定数据或代码的段地址为16位。
    8. 7. __generic:用于定义泛型函数。

    关键字作用:

    1. sizeof //获取对象占用内存字节数,用法 int big = sizeof(int);
    2. 类型//内存占用字节
    3. 值类型
    4. double
    5. float
    6. int
    7. 字符型
    8. char
    9. 用户类型
    10. enum
    11. struct
    12. union
    13. 修饰
    14. auto
    15. const
    16. extern
    17. long
    18. register
    19. short
    20. signed
    21. unsigned
    22. void
    23. volatile
    24. restrict
    25. staticswitchtypedefwhile、_Alignas、_Alignof、_Atomic、_Bool、_Complex、_Generic、_Imaginary、_Noreturn、_Static_assert、_Thread_local

    C18如何输出变量的名字:

    1. #define STR(x) #x
    2. #define PRINT_VAR_NAME(x) printf("变量名为:%s\n", STR(x))
    3. int main() {
    4. int a = 10;
    5. PRINT_VAR_NAME(a); // 输出:变量名为:a
    6. return 0;
    7. }

    字符串名启动同名函数:

    1. 在C语言中,可以通过函数指针来实现通过字符串名启动同名函数的功能。具体实现步骤如下:
    2. 1. 定义函数指针类型,例如:
    3. ```
    4. typedef void (*FuncPtr)(void);
    5. ```
    6. 2. 定义同名函数,例如:
    7. ```
    8. void func1(void) {
    9. printf("This is func1.\n");
    10. }
    11. void func2(void) {
    12. printf("This is func2.\n");
    13. }
    14. ```
    15. 3. 将同名函数的函数指针存储到一个哈希表中,例如:
    16. ```
    17. #define MAX_FUNC_NUM 10
    18. static const char* func_names[MAX_FUNC_NUM] = {"func1", "func2"};
    19. static FuncPtr func_ptrs[MAX_FUNC_NUM] = {func1, func2};
    20. static int hash(const char* str) {
    21. int hash_val = 0;
    22. while (*str) {
    23. hash_val = (hash_val << 5) + *str++;
    24. }
    25. return hash_val;
    26. }
    27. static FuncPtr get_func_ptr(const char* func_name) {
    28. int index = hash(func_name) % MAX_FUNC_NUM;
    29. if (strcmp(func_names[index], func_name) == 0) {
    30. return func_ptrs[index];
    31. }
    32. return NULL;
    33. }
    34. ```
    35. 4. 通过字符串名获取同名函数的函数指针,并调用该函数,例如:
    36. ```
    37. const char* func_name = "func1";
    38. FuncPtr func_ptr = get_func_ptr(func_name);
    39. if (func_ptr != NULL) {
    40. (*func_ptr)();
    41. }
    42. ```

  • 相关阅读:
    .NET 6 实现滑动验证码(二)、基本数据
    内核与协议无关接口层的实现
    增强for循环和一般for循环的对比使用
    Maven——maven核心概念
    Linux操作系统平台
    商城分销机制怎么做?分销机制比例如何设定?
    众多mock工具,这一次我选对了
    Codeforces-1689 C: Infected Tree 【树形动态规划】
    悟空crm安装搭建 报错[0] RedisException in Redis.php line 56问题处理办法
    死锁
  • 原文地址:https://blog.csdn.net/cfqq1989/article/details/133797887