求教:linuxC/C++ 怎样在往执行文件中传递一个参数,并且作为宏定义的值?

最帅程序猿 发布于 2013/04/16 15:26
阅读 1K+
收藏 0


比如  ./walk   5

然后程序里是: #define MAN   5      

这个怎么实现呢?

加载中
0
OscerSong
OscerSong
这个不可行吧   你直接赋值给MAN不就行了吗
txgcwm
txgcwm
回复 @wzhyuan : 将数据写入到配置文件中,程序启动后读出,不就可以了。
最帅程序猿
最帅程序猿
回复 @txgcwm : 怎么弄配置?
txgcwm
txgcwm
回复 @wzhyuan : 那你就弄个配置项,对于后期也容易扩展。
OscerSong
OscerSong
全局变量
最帅程序猿
最帅程序猿
很多文件用到。并且要求可变。挨个函数往里传太麻烦。
0
进击的企鹅
进击的企鹅
宏定义是在编译的时候展开的,可以在编译的时候指定宏gcc -D'MAN=5' ......
最帅程序猿
最帅程序猿
谢谢。不过,这要给别人用的,让使用者指定。
0
张亦俊
张亦俊

全局变量?

int MAN;
//......
int main(int argc, char* argv[])

{
    MAN = atoi(argv[1]);
    //......
}

最帅程序猿
最帅程序猿
没错,是全局变量。要定义在公共的.h 里面
0
panlatent
panlatent
各如果我没理解错,那这问题就是种错。 宏处理发生在编译期之前,实则是文本预处理,将源文件中所有出现的宏进行文本的替换。而你这个参数是在程序运行时…… 一般是讲main的参数赋给(全局)变量
toil
toil
胖子好回答
小浮云
小浮云
+1
0
最帅程序猿
最帅程序猿

引用来自“潜伏的胖子”的答案

各如果我没理解错,那这问题就是种错。 宏处理发生在编译期之前,实则是文本预处理,将源文件中所有出现的宏进行文本的替换。而你这个参数是在程序运行时…… 一般是讲main的参数赋给(全局)变量
那面对这种需求,只能挨个传参了。
0
中山野鬼
中山野鬼

楼主的大体意思我这样理解,看是否正确。你是向,执行文件后面更个参数,然后这个参数不单单是 main函数的 argv里,作为变量存储。而是希望能作为宏定义的定义内容?

如果这样的想法,明确说,不可行。宏是针对预编译的,直接会对应你的编译、连接后的代码的内容。这块你理论混淆了。

不过你的想法,是可以实现的。你可以用全局变量。然后作为参数,在main函数里,直接将后面的参数,转移到全局变量中。这样一样可以使用。我估计,你想用宏,可能还有别的想法。哈哈。想法多不好。不过你可以说出来,我看看是否有对应解决方案。

中山野鬼
中山野鬼
回复 @wzhyuan : 哈。这和宏没有关系的。你要一个宏在多个文件中起作用,还是要#include,这和#include一个全局变量申明有差异嘛?可能有人认为是为了优化速度,毕竟常量访问更快,那也是通过函数指针的方式实现。
最帅程序猿
最帅程序猿
因为涉及多个文件和函数,确实宏是最简便的方法
返回顶部
顶部