c11

    4熱度

    1回答

    C11指定6.7節,其聲明也定義: 的標識符的定義是該標識符的聲明: - 爲一個對象,使存儲到該對象保留; [...] 我沒有找到一個全面的列表,它的對象聲明導致存儲被保留。直覺上我很清楚,但我無法從C11標準中獲取這些信息。

    3熱度

    2回答

    在下面的代碼中,我聲明瞭一個結構成員變量作爲結構名稱的同名。 struct st { int st; }; int main() { struct st t; t.st = 7; return 0; } 我不知道,它的工作罰款GCC編譯器並沒有給出衝突錯誤。 所以, 編譯器如何知道結構名和變量名? 編譯器內部使用什麼機制?

    2熱度

    3回答

    我看到this way在C11中實現某種struct繼承與匿名struct,並且想試用它。以下是我有:從GCC struct struct_a { int aa; }; struct struct_b { struct struct_a; int bb; }; int main(void) { volatile struct struct_b

    2熱度

    1回答

    我特別尋找C11標準(ISO/IEC 9899:2011)或POSIX頁面中的單詞。我檢查了POSIX manual for fwrite,但它沒有提及未定義的行爲。然而,manual for fclose不說, ,來電後FCLOSE(),不確定的行爲的任何使用流導致的。 但我仍然看不到NULL流是否會導致UB。

    3熱度

    3回答

    爲什麼int16_t complex不能編譯,而在x86和x86_64機器上的int16_t,是short int上的typedef?以下是使用C99和C11標準對gcc 5.4和4.9進行測試的示例代碼。編譯器抱怨在聲明說明符中有兩個或多個數據類型。 代碼: #include <complex.h> #include <stdint.h> #include <stdio.h> int m

    0熱度

    1回答

    如果我初始化這樣的變量: static int i = 2 * 2/0; 然後,編譯器給我一個錯誤。 prog.c: In function 'main': prog.c:5:23: warning: division by zero [-Wdiv-by-zero] static int i = 2 * 2/0; ^ prog.c:5:17: error: ini

    0熱度

    1回答

    編輯問題是:「‘strnlen’的功能隱式聲明」:我怎麼刪除警告/EDIT 編譯(特殊切下的測試只有一個的#include) #include <string.h> void DeleteMe(){ const char* pC = "ABC"; int nLen = strnlen(pC, 255); char buffer[256]; strncpy(

    5熱度

    1回答

    作爲比較操作數的結構不可用是C中更明顯的事情之一,對我來說沒有太大意義。結構可以按值傳遞並通過賦值複製,但==未指定。 以下是C11標準(草案)的相關部分,它們定義了等號運算符(==和!=)和簡單賦值運算符(=)的約束條件。請注意在平等運營商的限制下缺乏結構和聯盟。 (除了缺少處理_Atomic C99的措辭是相同的)。 6.5.9公平運營商 約束 下列情況之一的應持有: 兩個操作數的算術類型;

    0熱度

    1回答

    在一個C++項目中,我使用了包含一些C11頭文件的C庫。它不會與GCC編譯。看到這個簡單的代碼: // main.cc #include <stdatomic.h> int main() { return 0; } 運行gcc main.cc -lstdc++,它抱怨:error: ‘_Atomic’ does not name a type。然而,clang main.c

    4熱度

    1回答

    我試圖重載函數與C11 _Generic宏是這樣的: int isPrim_int (int num); int isPrim_lint (long int num); int isPrim_llint (long long int num); #define isPrim(_1, ...) _Generic((_1), \ int: isPrim