gcc的-D选项可以定义宏,这是什么意思呢?
C语言源程序中有#define定义的宏,可以起到替换、条件编译的功能;定义宏的方式是放在头文件或者C文件中。gcc提供了另外一种宏定义的方法,当然可以想象这样的宏定义方法并不是很好用,但毕竟编译器给我们提供了额外的宏定义的方法。假设程序需要很多宏,不可能这些宏都在编译器中定义,可以说比较重要的宏才会放在gcc的D选项后边。
-Dname 定义宏name,默认定义内容为字符串“1”
-Dname=defn 定义宏name,并且内容为defn
二、实验
#include <stdio.h> int main()
{
#ifdef HELLO
printf("HELLO defined !\n");
printf("HELLO = %d\n",HELLO); #else printf("HELLO not define!\n"); #endif return 0;
}1.执行编译命令:
#gcc main.c -o main
main的执行结果 :
HELLO not define!
2.执行编译命令:(条件编译测试)
#gcc -DHELLO main.c -o main
main的执行结果 :
HELLO defined!
HELLO = 1
3.执行编译命令:(宏替换测试)
#gcc -DHELLO=36 main.c -o main
main的执行结果 :
HELLO defined!
HELLO = 36
setenv
首先要说明的是,通过此函数并不能添加或修改 shell 进程的环境变量,或者说通过setenv函数设置的环境变量只在本进程,而且是本次执行中有效。如果在某一次运行程序时执行了setenv函数,进程终止后再次运行该程序,上次的设置是无效的,上次设置的环境变量是不能读到的。
表头文件 #include<stdlib.h>
定义函数 int setenv(const char *name,const char * value,int overwrite);
函数说明 setenv()用来改变或增加环境变量的内容。参数name为环境变量名称字符串。参数 value则为变量内容,参数overwrite用来决定是否要改变已存在的环境变量。如果没有此环境变量则无论overwrite为何值均添加此环境变量。若环境变量存在,当overwrite不为0时,原内容会被改为参数value所指的变量内容;当overwrite为0时,则参数value会被忽略。返回值 执行成功则返回0,有错误发生时返回-1。
本文介绍了GCC编译器中的宏定义方法及其使用场景,通过实例演示了如何使用-D选项来定义宏并进行条件编译和宏替换。此外,还详细解释了setenv函数的作用及使用方法,包括如何在程序中更改或增加环境变量。
3119

被折叠的 条评论
为什么被折叠?



