首页 > 其他分享 >C语言的一些不常用的编译知识

C语言的一些不常用的编译知识

时间:2023-07-23 17:25:32浏览次数:32  
标签:__ ... stringify int 知识 C语言 编译 编译器 define

1.__stringify

Linux内核中有如下两个宏:
#define __stringify_1(x...) #x
#define __stringify(x...) __stringify_1(x)

作用:会将x替换成()里面的内容。

2.GCC __attribute__ 使用

__attribute__((used)):

表示对于这个函数可能不会调用它、可能用不到它,编译器不用进行 warning 提示。
而在嵌入式中 中断函数都是由内部的中断处理机制通过中断向量做跳转调用的,不是开发人员 “显式” 去调用的,因此在一些规则检查比较严格的编译器上编译时,就会出现类似于上面的警告,为了视野干净我们就添加这个属性。向编译器说明这段代码有用,即使在没有用到的情况下编译器也不会警告!告诉编译器避免被链接器因为未用过而被优化掉。

3.##的用法

#define CONCAT(s1, s2) s1##s2。int n = CONCAT(123,456);   结果就是n=123456。

4.#define XXX (...)宏定义

 

#include <stdio.h>
using namespace std;
#define LOG(...) printf(__VA_ARGS__)
#define TADD(...) add(__VA_ARGS__)
int add (int a, int b) {
return a + b;
}
int add (int a, int b, int c) {
return a + b + c;
}
int main() {
// test1
LOG("This is a test %d, %d, %d \n", 1, 2, 3);
printf("result1 is %d\n", TADD(1,2));
printf("result1 is %d\n", TADD(1,2,3));
return 0;
}

This is a test 1, 2, 3
result1 is 3
result1 is 6

 

标签:__,...,stringify,int,知识,C语言,编译,编译器,define
From: https://www.cnblogs.com/SongYaLakeAhui/p/17575199.html

相关文章

  • C语言数据类型和变量
    一.数据类型介绍1.概念所谓类型,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才能知道如何操作数据。2.数据类型分类**内置类型:字符,整型,浮点型,布尔类型自定义类型:数组,结构体-struct,枚举-enum,联合体-union**(自己创造类型)a.字符类型char[signed]char-有符号的charunsi......
  • 知识蒸馏
    KnowledgeDistill蒸馏思想知识蒸馏是一种模型压缩方法,通过引导轻量化的学生模型“模仿”性能更好、结构更复杂的的教学模型(教师模型),在不改变学生模型结构的情况下提高其性能。最早由Hinton在2015年提出,应用于分类任务。知识蒸馏的目的是将教师模型中的知识转移到学生模型中,从......
  • c语言当中的COORD ,GetStdHandle(),SetConsoleCursorPosition(),以及避免清屏和反复刷新
    这是WindowsAPI定义的结构体类型COORD来表示字符在控制台屏幕上的坐标,结构体类型COORD定义为:typedefstruct_COORD{SHORTx;SHORTy;}COORD;使用WindowsAPI GetStdHandle()从一个特定的标准设备获取表示设备的句柄(用来标识不同设备的一个数值),SetConsoleCursor......
  • C语言实现飞机大战手机游戏完整代码
    ​大一课设做的飞机大战手机游戏,可以进行登入和注册,这个是利用单链表做的,源代码已经给出,这个是最基本的飞机大战模式,我设置了几个功能,比如排行榜之类的。排行榜是用结构体数组做的,已及冒泡排序,并且在文件里保存信息。比较简单。#include"stdio.h"#include"windows.h"  //用......
  • 用c语言实现2048小游戏
    ​ #include<time.h> #include<stdlib.h> #include<conio.h> #include<stdio.h> #include<windows.h> #definex026 #definey01 HANDLEhOutput=GetStdHandle(STD_OUTPUT_HANDLE); /*显示声明*/ voidp(int*a,inti,intx,inty); /*部......
  • Python使用Flask开发Web服务 - 裴 - flask的路由route的知识点演示
     默认是支持GET:  修改后,只支持post: 也可以getpost都支持 ......
  • 随笔02---JavaSE基础知识
    (1)基本数据类型:八大基本数据类型:1、整数类型:byte占1字节short占2字节int占4字节long占8字节(定义时后面加L)2、浮点数类型:float占4字节(后加F)double占8字节3、字符类型:char占2字节4、布尔类型:boolean占1个比特位(1bit)(2)引用数据类型:类、接口、数组-------------......
  • JavaScript | JavaScript入门知识
    JavaScript编写位置我们目前学习的JS全都是客户端的JS,也就是说全都是需要在浏览器中运行的,所以我们我们的JS代码全都需要在网页中编写。我们的JS代码需要编写到<script>标签中。我们一般将script标签写到head中。(和style标签有点像)(但是不一定)属性:type:默认值text/javascri......
  • 【技术积累】Vue中的核心知识【三】
    this关键字在Vue中,this关键字是指向当前组件实例的引用。它可以在组件的各个方法和生命周期钩子函数中使用。在组件的方法中,this指向当前组件实例,可以通过this访问组件的属性和方法。例如,可以通过this.message访问组件的data中的message属性。在生命周期钩子函数中,this同样......
  • c语言_十大排序算法
    1.冒泡排序思想:通过比较相邻的元素并交换它们来排序。时间复杂度为O(n^2); #include<stdio.h>voidbubble_sort(intarr[],intlen){inti,j,temp;for(i=0;i<len-1;i++)for(j=0;j<len-1-i;j++)if(arr[j]>arr[j+......