主题:求教一个VC.net的问题 -- 面壁
- 共: 💬 15 🌺 11
int main(int argc, char* argv[])
{
std::cout<<argv[1];
return 0;
}
如何在visual C++和Linux上实现?
(即怎么让我在命令行上给出argv[1]?)
谢谢了!
VC:
进入dos命令行,进入该文件目录,
输入: *.exe argv[1]
是这么样的吗?
argv[0]默认为你的可执行程序名.
*.exe /a /b
其中的/a就是argv[1],
/b就是argv[2]
可以预设command line parameter, 自己在编译,还是debug的菜单里找一下, 有一个对话框里有的.
多谢兄台。 准确的讲,我的问题是一个VC.net的问题:
我执行C++程序时,通常建一个Projekt, 然后运行时自动弹出一个dos 窗口。
当涉及到argv[1]时,就不知该怎么办了。我只有进入dos命令行,进入该文件目录,然后输入:*.exe argv[1] 。请教兄台:是这么样的吗?
argv[1]是一个文件名。当我写的程序要调这个文件(20M)时(加密完需2秒),它必须在Debug这个文件夹外; 而标准算法写的同样的程序要调这个文件时,它必须在Debug这个文件夹内!(加密完需30秒!实际应为400毫秒)
所以我就搞不懂了?虚心再求教兄台。
除了你说的那种方法外,还可以创建一个这个.exe文件的快捷方式,把需要加密的文件拖到这个快捷方式上或者直接拖到这个.exe文件上.
之所以出现在目录外面和在目录里面的情况,是因为你编译对象所在的目录和当前目录不在一起,而你又没有在argv[1]中给出全路径文件名
我想应该还是路径的问题。
可是我将"文件名"代替argv[1],应该不会有路径的问题吧,可是一样,还是30秒!
vc的时间函数好像不一定准的
就是C++的程序,时间函数是用int start=clock();
建立win32console-Projekt,然后compilen,然后start,最后弹出运行结果窗口。
标准程序用了vector<char>,我怀疑是STL的问题。因为我的程序只是用了数组(a[]),曾经也试图用STL中的map<int,int>来优化我程序中的查找部分,结果却是60秒!!!
release mode有optimzed for speed选项。另外库连接方式也不同,不过这些你都可以自己改。
另外.net里面mixed mode debug很慢,可以把debugger类型设成managed。你这个速度差这么多有可能与此有关。
改成release,从60秒降到了400毫秒!!!(我的程序只从2秒降到了1,4秒 为什么?使用STL要快吗?)
查了4,5本书,只查到一句话:”debug通常在测试时使用。“ 老兄若有时间,可否再进一步解释一下debug与release的区别,功能?
我碰巧知道一点皮毛罢了,举手之劳何当如此大礼!
debug和release只是两种预设的configuration罢了。具体分别是什么,只要打开project->properties就可以看到了,你也可以自己改。一般来说debug会在obj里加进一些额外的symbols,preprocessor也会加些东西,另外比如memory allocation会有额外的保护检查覆盖,没有optimization等等。这些都有可能造成速度下降。
在.net里面managed code和unmanaged code混在一起往往会造成速度问题,你可以对比一下标准程序,是否有需要把你的程序migrate成managed code。
抱歉中英文混用,自己看着也觉得特别扭。不过不知道中文的术语,只好将就了。