百科问答小站 logo
百科问答小站 font logo



在xcode里如何解决没有windows.h的头文件? 第1页

  

user avatar   mai-wen-xue-67 网友的相关建议: 
      

试一下这个吧, Mingw-w64 MacPorts. (+xcode)


       https://www.mingw-w64.org/downloads/#darwinmac-os-x     

或者这个

       boost  https://stackoverflow.com/questions/59473859/how-do-i-add-the-boost-library-to-xcode-11-c  http://neutrofoton.github.io/blog/2016/03/27/configure-boost-c-plus-plus-on-xcode/      





(远程)终端服务或者

虚拟机也是一个解决办法

       https://www.virtualbox.org/wiki/Downloads     

虚拟机上可以安装比较旧的 WINDOWS 的 180 天测试版




另外, VSCODE 应该有 MAC 版本。



俺买不起 MAC 因此没办法验证 xcode 的可玩性。


但是, 在 LINUX 下可以用 WINE + VSCODE 编译 WINDOWS API 入门书中的绝大部分示例。




附录:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

【节选】VS CODE 笔记: 在 LINUX 下用于学习 PROGRAMMING WINDOWS Win32 API Hello World 的简单设置


测试代码 1

       #include <windows.h>  int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0) ; return 0 ; }     



       > Executing task: C/C++: x86_64-w64-mingw32-g++ build 64-bit active file <  Starting build...  【略】                                                                               ~~~~^~~~~~~~  Build finished with warning(s).  Terminal will be reused by tasks, press any key to close it.     



测试代码 2

        #include <Windows.h>  int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0) ; return 0 ; }     



x86_64-w64-mingw32-g++ 在 LINUX (Fedora 33~35) 下可用于学习 Programming Windows (5th Edition) Win32 API Hello World 的

** 备注: 带资源文件 .rc 的需要更繁复的设置


tasks.json 节段

               { 【略】         }         ,     


x86_64-w64-mingw32-g++ 在 LINUX (Fedora 33~35) 下可用的

launch.json

       { 【略】 }     


x86_64-w64-mingw32-g++ 在 LINUX (Fedora 33~35) 下可用的 c_cpp_properties.json


       { 【略】 }     



附录:

交叉编译工具的安装

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

       # dnf -y install mingw32-filesystem mingw32-binutils mingw32-gcc mingw32-crt mingw32-headers mingw32-runtime  【略】       


或者

       # dnf -y groupinstall "MinGW cross-compiler"      


顺便提一下, LINUX 下没有 windres.exe, WINDOWS 下可以在 MinGW 或者 MSYS2 或者 CYGWIN 的 BIN 目录下发现 windres.exe, 而 LINUX 下俺找不着


          find ./ -type f -name windres    find /usr -type f -name windows.h    find ./ -type f -name windres    find / -type f -name "windres.exe"    find /usr -type f -name windres*.*  #find /usr -type f -name windows.h 【略】     

user avatar   changanmoon 网友的相关建议: 
      

个人认为题主 @tby 95% 的概率是学生,而且遇上了需要使用特殊头文件的代码。

但我很惊讶,到目前为止,竟然没有任何一个答主能正确回答出来这个问题,所以我来填补一下这个坑吧。

首先题主有个说法是不对的,也由热心人改正过来了:头文件(header file)的扩展名是 .h,而不是 C 语言的源代码文件(source file)的扩展名 .c。

头文件是 C/C++ 中一个辅助作用的文件,其中包含了需要包括的函数定义及其相关常量。

windows.h 包含了 Windows API 中所有函数的声明、常用的宏定义、各种函数使用的所有数据类型和子系统。这个头文件是随附于 Windows 平台的编译器当中的(例如 MinGW),并且只为 Windows 操作系统设计,因此非 Windows 操作系统根本无法使用这个头文件,即使拷贝了所有相关的依赖文件,仍然是编译无效的。

因此对于开发人员来说,这样的代码最好在 Windows 下完成,若无 PC,也应有个 Windows 虚拟机。

考虑到很多大一新生学习 C 语言的目的是为以后的程序设计课程打基础,让代码能跑出来。但需要承认,Windows、macOS、Linux 三大操作系统之间有固有的差异,而教材上的极少数例子并不具备平台的通用性。

鉴于题主提到了 Xcode(注:Xcode 是由苹果开发的,在 macOS 上独有的 IDE,用于开发 macOS 与 iOS 应用),为了让自己写的代码在 macOS 下与教材产生同等的效果,需要转换一下原有的思维。

也就是说,将 Windows 下需要的命令,“翻译”成 macOS 应有的运作方式。

比如获取系统的日期与时间,因为使用了 windows.h,Windows 下可以:

       #include <stdio.h> #include <windows.h>  int main() {  SYSTEMTIME systime;  GetLocalTime(&systime);  printf("%d/%d/%d %02d:%02d:%02d", systime.wYear, systime.wMonth, systime.wDay, systime.wHour, systime.wMinute, systime.wMinute);  return 0; }     

以下为小熊猫 C++ 运行的结果:

在 macOS 下则有所不同,须借助内置 Bash 的date命令,这样需要使用system()函数,需要包含头文件stdlib.h,以上代码可改写为:

       #include <stdio.h> #include <stdlib.h>  int main() {  system("date '+%Y/%m/%d %H:%M:%S'");  return 0; }     

在 Coderunner 中的运行结果如下(当然你也可以用 Xcode 来做):

比对一下两个运行的结果,形式上是基本一致的。另外修改后的这段代码,在 Linux 上也可以编译成功。

当然,使用time.h也能实现上面的效果,下面的这个代码可以保证在不同的操作系统上都能使用,但远比前面的实现要复杂些。

(注意:不应使用ctime()函数,因为这个函数只能返回有且仅有一种的时间格式,且无法自定义)

       #include <stdio.h> #include <time.h>  int main(int argc, char *argv[]) {  char time_str[100];  time_t rawtime;  time(&rawtime);  strftime(time_str, 100, "%Y/%m/%d %I:%M:%S", localtime(&rawtime));  puts(time_str);  return 0; }     

这当然是一个很小的例子,但面对这个问题,需要理性客观地看待不同操作系统之间的差异,并对操作系统的系统命令行有一定的熟悉度。

如果不了解的话,也应善用搜索引擎搜索并多加以尝试,死啃书本或将代码完全照搬的做法是不可取的。




  

相关话题

  Windows10操作系统通用应用平台(UWP)为何不推广免费集成开发环境(IDE)吸引开发者? 
  Mac 下顺手的 C/C++ 开发 IDE 是哪个? 
  在xcode里如何解决没有windows.h的头文件? 
  Mac 下顺手的 C/C++ 开发 IDE 是哪个? 
  在xcode里如何解决没有windows.h的头文件? 
  Windows10操作系统通用应用平台(UWP)为何不推广免费集成开发环境(IDE)吸引开发者? 
  在xcode里如何解决没有windows.h的头文件? 
  Windows10操作系统通用应用平台(UWP)为何不推广免费集成开发环境(IDE)吸引开发者? 
  Mac 下顺手的 C/C++ 开发 IDE 是哪个? 
  在xcode里如何解决没有windows.h的头文件? 

前一个讨论
森海赛尔HD600、HD800和HD820,区别有那么大吗?
下一个讨论
虹吸壶内连接上下壶的玻璃管里面垂着的链条的作用是什么?





© 2024-06-03 - tinynew.org. All Rights Reserved.
© 2024-06-03 - tinynew.org. 保留所有权利