1. 程式人生 > >標頭檔案windows.h和巨集定義而引發的錯誤

標頭檔案windows.h和巨集定義而引發的錯誤

先看下面一段程式碼:

#define _CRT_SECURE_NO_WARNINGS 1

#define N 6
#include<stdio.h>
#include<Windows.h>


int main()
{
	printf("%d \n", N);
	system("pause");
	return 0;
}

這段程式碼一般人覺得對很正常,%90的人都會覺得沒錯,但是這段程式碼編譯失敗。錯誤資訊是:

1>c:\program files (x86)\windows kits\8.1\include\um\winnt.h(15405): error C2143: 語法錯誤 : 缺少“:”(在“常量”的前面)
1>c:\program files (x86)\windows kits\8.1\include\um\winnt.h(15405): warning C4015: “<alignment member>”: 位域型別必須是整型
1>c:\program files (x86)\windows kits\8.1\include\um\winnt.h(15424): error C2143: 語法錯誤 : 缺少“:”(在“常量”的前面)

1>c:\program files (x86)\windows kits\8.1\include\um\winnt.h(15424): warning C4015: “<alignment member>”: 位域型別必須是整型

其實這是一個常見的底層錯誤,因為windows.h包含的一個結構體裡有一個巨集,也叫N,這就和之前我定義的巨集N衝突了,所以出現這樣的問題。

解決方案:

1.將自己的巨集換一個字母,不要是N

2.將#define N 6放在windows.h後面

相關推薦

檔案windows.h巨集定義引發錯誤

先看下面一段程式碼:#define _CRT_SECURE_NO_WARNINGS 1 #define N 6 #include<stdio.h> #include<Windows.h> int main() { printf("%d \n",

編寫一個可變引數的C函式——檔案stdarg.h巨集va_start ,va_argva_end的應用

我們在C語言程式設計中會遇到一些引數個數可變的函式,例如printf()這個函式,它的定義是這樣的:int printf( const char* format, ...);它除了有一個引數format固定以外,後面跟的引數的個數和型別是可變的,例如我們可以有以下不同的呼叫方

ubuntu中找不到檔案term.hcurses.h的解決方法

創建於 2012-05-16 收藏自個人的百度空間 -------------------------------- 當/usr/include中沒有term.h和curses.h時,包含這兩個標頭檔案的程式會如下報錯: term.h: 沒有那個檔案或目錄 curses.h

C++ 基礎(五)使用vs2015封裝c++生成.dll檔案、.lib檔案、.h檔案後,給另一個工程使用:使用前,需配置檔案(.h)靜態庫(.lib) 動態庫(.dll )專案屬性

一、簡介 我是一個認真的人,要麼不寫,要麼我就把步驟、截圖、程式碼,一 一 附上,方便大家參考學習。 1、為什麼要生成DLL和lib?      就是為了給VS工程呼叫(比如C#呼叫、C++工程)。 2、C#為什麼要呼叫DLL和lib? C++寫的程

檔案重複包含變數重複定義

在c或c++中,標頭檔案重複包含問題是程式設計師必須避免的問題,也是很多新手容易犯錯的問題。為什麼要避免標頭檔案重複包含呢?        1.我們知道在編譯c或c++程式時候,編譯器首先要對程式進行預處理,預處理其中一項工作便是將你源程式中#include的標頭檔案完整的展

C++中對於類來說檔案(.h原始檔(.cpp)都應該寫些什麼 (類的常規建立)

    寫類的宣告(包括類裡面的成員和方法的宣告)、函式原型、#define常數等,但一般來說不寫出具體的實現。     在寫標頭檔案時需要注意,在開頭和結尾處必須按照如下樣式加上預編譯語句(如下): #ifndef CIRCLE_H#define CIRCLE_H//你的程式碼寫在這裡#endif

習題 8.5 將本章的例8.4改寫為一個多檔案的程式:1.將類定義放在檔案arraymax.h中;2.將成員函式定義放在原始檔arraymax.cpp中;3.主函式放在原始檔file1.cpp中。

C++程式設計(第三版) 譚浩強 習題8.5 個人設計 習題 8.5 將本章的例8.4改寫為一個多檔案的程式: 1.將類定義放在標頭檔案arraymax.h中; 2.將成員函式定義放在

C++中的檔案(.h原始檔(.cc)

標頭檔案(,h): 寫類的宣告(包括類裡面的成員和方法的宣告)、函式原型、#define常數等,但一般來說不寫出具體實現。 在寫標頭檔案時需要注意,在開頭和結尾處必須按照如下樣式加上預編譯語句: #ifndef HELLO_H #define HELLO_H //You

Static修飾的變數定義檔案(.h)中的影響

static修飾的全域性變數的作用範圍會被限制在宣告的原始檔內。舉個例子, a.cb.cc.h其中c.h被a.c,b.c引用, 而且c.h中定義了:static int test = 0;在編譯的時候,a.c會和c.h一起編譯, 然後b.c也會和c.h一起編譯, 但是要注意,

檔案的編寫引用

      我用的是 Dev-c++  編寫標頭檔案     首先寫標頭檔案裡面的函式,       然後儲存,記得字尾寫  .h   就行   例:(順序表的標

C語言檔案stdlib.h裡面有什麼函式

主要含有的內容方向: A.字串轉換 B. 隨機數 C.記憶體管理 D.與環境的介面 E.查詢與排序 F.整數運算 G.多位元組字元 … 友情連結: (1)關於 stdio.h 和 stdlib.h 包含的函式 https://blogG…csdn.net/weixin_42513339/

mac 下 clang++ 找不到檔案 stdlib.h

因為要用 openmp庫,用 clang++ 編譯 c++程式,出現瞭如下報錯: clang++ xx.cpp -o xx -fopenmp /usr/local/Cellar/llvm/7.0.0/include/c++/v1/stdlib.h:94:15: fatal error: 'std

simplelink_cc2640r2_sdk_1_40_00_45 之 C/C++ Compiler 檔案包含中的巨集

simplelink_cc2640r2_sdk_1_40_00_45 ---------------------------------------------------------------- $SRC_BLE_DIR$=C:\Users\coolban_one\Desktop\C

VS2017報錯檔案unistd.h

#include <unistd.h>   符號常量 是POSIX標準定義的unix類系統定義符號常量的標頭檔案,包含了許多UNIX系統服務的函式原型,例如read函式、write函式和getpid函式 unistd.h在unix中類似於wi

通過檔案 time.h中的介面獲取系統當前時間的方法

#include <time.h> 82 struct tm *t; 83 time_t tt; 84 time_t ts; 85 86 struct tm tr = {0}; 87

萬能檔案 stdc++.h

最近在看acm的ac程式碼時,發現大神用的標頭檔案只有一行,而自己有時寫標頭檔案都要寫老半天。在網上查了很多資料,終於也可以像大佬一樣只寫一行標頭檔案,現在寫程式碼都感覺很輕鬆。 其實在codeforces已經有過說明,那我就簡單翻一下吧。 如果安裝了MinGW的直接在資料夾裡面找到b

VS2017配置使用檔案pthread.h

POSIX執行緒(POSIX threads),簡稱Pthreads,是執行緒的POSIX標準。該標準定義了建立和操縱執行緒的一整套API。在類Un

Microsoft Visual Studio下編譯缺少檔案unistd.h解決辦法

許多在Linux下開發的C程式都需要標頭檔案unistd.h,但VC中沒有個標頭檔案, 所以用VC編譯總是報錯。把下面的內容儲存為unistd.h,可以解決這個問題。 /** This file

C語言字串檔案string.h中的strlen,strcat,strcpy,strncpy,strcmp,strlwr,strupr函式

前言 本博文內容基於VC6.0++, 2.本博文主要介紹包含在string.h中的幾個字串相關的函式; strlen(字串陣列名) 字串有效長度函式; 返回值:整型 功能:用來測量一個字串的有效長度(所謂有效,就是從字串中的第一個字元開始,一

FFmpeg(2.4.4)中關於影象格式的檔案 -- pixfmt.h

<span style="font-size:18px;">/* * copyright (c) 2006 Michael Niedermayer <[email protected]> * * This file is part of FFmpeg.