程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 學習windows編程(3)—hello.c的疑惑

學習windows編程(3)—hello.c的疑惑

編輯:關於C語言


上一篇,我們問了幾個問題,這一篇就從hello.c的各個方面來研究研究,等到這一篇的結束來看這些疑惑有哪些是可以解答了的,當然還有一些可能要放到後面解決了……。

既然要抽絲剝繭,就要從手頭已有的線索出發,同時加上搜索到的知識,以及自己的思考,任何問題的解決都是通過這個路徑(當然,老板除外,老板這種生物只需要發出指令,然後得到結果就OK了……)。

我們現在有的,是一個hello.c文件,通過cl命令就可以生成目標hello.exe文件。

那我們就可以研究一下cl這個東西。

CL解釋

CL.EXE(或cl.exe,似乎windows的文件系統對於大小寫是不敏感的),是何許人也呢?直接引用微軟的說辭吧。

CL.exe is a 32-bit tool that controls the Microsoft C and C++ compilers and linker. The compilers produce Common Object File Format (COFF) object (.obj) files. The linker produces executable (.exe) files or dynamic-link libraries (DLLs).

Note that all compiler options are case sensitive.

To compile without linking, use /c.

因為VC6的版本說明沒有找到,這裡的說明文字是Visual studio 2003的CL.EXE說明,不過都是一樣的。從上面的說明可以看到CL是用來控制微軟C和C++編譯器(compiler)和鏈接器(linker),一共做了兩件事情。編譯器會生成COFF文件格式的目標文件(.obj);鏈接器會生成可執行文件(.exe)或者動態鏈接庫文件(DLLs)。

對比我們之前的做法,的確是執行cl命令之後,生成了一個hello.obj文件和一個hello.exe文件。

另外在最後,還說明了一下,使用/c選項,則可以不進行鏈接過程。

CL選項

那cl還有哪些選項呢?使用cl /?來看看。

 1 d: est>cl /? 2 Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86 3 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. 4  5                           C/C++ COMPILER OPTIONS 6  7                               -OPTIMIZATION- 8  9  /O1 minimize space                       /Op[-] improve floating-pt consistency10  /O2 maximize speed                       /Os favor code space11  /Oa assume no aliasing                   /Ot favor code speed12  /Ob<n> inline expansion (default n=0)    /Ow assume cross-function aliasing13  /Od disable optimizations (default)      /Ox maximum opts. (/Ogityb1 /Gs)14  /Og enable global optimization           /Oy[-] enable frame pointer omission15  /Oi enable intrinsic functions16 17                              -CODE GENERATION-18 19  /G3 optimize for 80386                   /Gy separate functions for linker20  /G4 optimize for 80486                   /Ge force stack checking for all funcs21  /G5 optimize for Pentium                 /Gs[num] disable stack checking calls22 /G6 optimize for Pentium Pro             /Gh enable hook function call23 /GB optimize for blended model (default) /GR[-] enable C++ RTTI24 /Gd __cdecl calling convention           /GX[-] enable C++ EH (same as /EHsc)25 /Gr __fastcall calling convention        /Gi[-] enable incremental compilation26 /Gz __stdcall calling convention         /Gm[-] enable minimal rebuild27 /GA optimize for Windows Application     /EHs enable synchronous C++ EH28 /GD optimize for Windows DLL             /EHa enable asynchronous C++ EH29 30 /Gf enable string pooling                /EHc extern "C" defaults to nothrow31 /GF enable read-only string pooling      /QIfdiv[-] enable Pentium FDIV fix32 /GZ enable runtime debug checks          /QI0f[-] enable Pentium 0x0f fix33 34                               -OUTPUT FILES-35 36 /Fa[file] name assembly listing file     /Fo<file> name object file37 /FA[sc] configure assembly listing       /Fp<file> name precompiled header file38 /Fd[file] name .PDB file                 /Fr[file] name source browser file39 /Fe<file> name executable file           /FR[file] name extended .SBR file40 /Fm[file] name map file41 42                               -PREPROCESSOR-43 44 /C dont strip comments                  /FI<file> name forced include file45 /D<name>{=|#}<text> define macro         /U<name> remove predefined macro46 /E preprocess to stdout                  /u remove all predefined macros47 /EP preprocess to stdout, no #line       /I<dir> add to include search path48 /P preprocess to file                    /X ignore "standard places"49 50                                 -LANGUAGE-51 52 /Zi enable debugging information         /Zl omit default library name in .OBJ53 /ZI enable Edit and Continue debug info  /Zg generate function prototypes54 55 /Z7 enable old-style debug info          /Zs syntax check only56 /Zd line number debugging info only      /vd{0|1} disable/enable vtordisp57 /Zp[n] pack structs on n-byte boundary   /vm<x> type of pointers to members58 /Za disable extensions (implies /Op)     /noBool disable "bool" keyword59 /Ze enable extensions (default)60 61                               -MISCELLANEOUS-62 63 /?, /help print this help message        /V<string> set version string64 /c compile only, no link                 /w disable all warnings65 /H<num> max external name length         /W<n> set warning level (default n=1)66 /J default ch

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved